У меня есть файл CSV с около 2000 записей.
Каждая запись имеет строку и категорию:
This is the first line,Line1
This is the second line,Line2
This is the third line,Line3
Мне нужно прочитать этот файл в список, который выглядит следующим образом:
data = [('This is the first line', 'Line1'),
('This is the second line', 'Line2'),
('This is the third line', 'Line3')]
Как можно импортировать этот CSV в список мне нужно с помощью Python?
csv
модуль: docs.python.org/2/library/csv.htmlОтветы:
Используя модуль CSV :
Вывод:
Если вам нужны кортежи:
Вывод:
Старый ответ Python 2, также с использованием
csv
модуля:источник
b
файл открывается в двоичном режиме, а не в текстовом режиме. В некоторых системах текстовый режим означает, что\n
при чтении или записи будет преобразовываться в новую строку для конкретной платформы. Смотрите документы .Обновлено для Python 3 :
Вывод:
источник
'r'
является режимом по умолчанию, поэтому указывать его не нужно. В документах также упоминается, что если csvfile является файловым объектом, его следует открыть с помощью newline = ''.Панды неплохо справляются с данными. Вот один пример, как его использовать:
Одним из больших преимуществ является то, что панды автоматически работают со строками заголовков.
Если вы не слышали о Seaborn , я рекомендую взглянуть на это.
Смотрите также: Как мне читать и записывать CSV-файлы с помощью Python?
Панды № 2
Содержание df:
Содержание диктов
Панды № 3
Содержание
lists
это:источник
tuples = [tuple(x) for x in df.values]
может быть написаноtuples = list(df.itertuples(index=False))
вместо Обратите внимание, что документы Pandas препятствуют использованию.values
в пользу.to_numpy()
. Третий пример меня смущает. Во-первых, потому что переменная названаtuples
, что подразумевает, что это список кортежей, тогда как на самом деле это список списков. Во-вторых, потому что, насколько я могу судить, все выражение можно заменить наdf.to_list()
. Я также не знаю, действительно ли второй пример здесь уместен.Обновление для Python3:
Вывод:
Если csvfile является файловым объектом, его следует открыть с помощью
newline=''
.модуль CSV
источник
list(map())
над списком понимания? Также обратите внимание на пробелы в начале каждого элемента второго столбца.Если вы уверены, что в вводе нет запятых, кроме разделения категории, вы можете прочитать файл построчно и разделить на части
,
, а затем отправить результат вList
Тем не менее, похоже, что вы смотрите на файл CSV, поэтому вы можете рассмотреть возможность использования модулей для него
источник
источник
.read().splitlines()
, вы можете выполнять итерацию по каждой строке файла напрямую:for line in in_file: res.append(tuple(line.rstrip().split(",")))
Также обратите внимание, что использование.split(',')
означает, что каждый элемент второго столбца будет начинаться с дополнительного пробела.line.rstrip()
->line.rstrip('\n')
.Как уже говорилось в комментариях, вы можете использовать
csv
библиотеку в Python. csv означает значения, разделенные запятыми, что кажется именно вашим случаем: метка и значение, разделенные запятой.Будучи категорией и типом значения, я бы предпочел использовать тип словаря вместо списка кортежей.
В любом случае в приведенном ниже коде я показываю оба способа:
d
это словарь иl
список кортежей.источник
(row[0], row[1])
слабее / более подвержен ошибкам, чем просто использованиеtuple(row)
?Достаточно простого цикла:
источник
К сожалению, я не считаю ни один из существующих ответов особенно удовлетворительным.
Вот простое и полное решение Python 3 с использованием модуля csv .
Обратите внимание на
skipinitialspace=True
аргумент. Это необходимо, поскольку, к сожалению, CSV OP содержит пробелы после каждой запятой.Вывод:
источник
Немного расширив свои требования и предположив, что вы не заботитесь о порядке строк и хотите, чтобы они были сгруппированы по категориям, вам может помочь следующее решение:
Таким образом, вы получаете все соответствующие строки в словаре под ключом, являющимся категорией.
источник
Вот самый простой способ в Python 3.x импортировать CSV в многомерный массив, и он содержит всего 4 строки кода, ничего не импортируя!
источник
Далее следует фрагмент кода, который использует модуль csv, но извлекает содержимое файла file.csv в список dicts, используя первую строку, которая является заголовком таблицы csv
источник
csv.DictReader
?