Чтение CSV-файлов в списки Python

У меня много файлов .csv в каталоге, и я хотел бы открыть каждый из них в цикле внутри Python таким образом, чтобы первый .csv считывался в список [0], а второй .csv читается в список [1 ] и так далее.

К сожалению, хотя мой код проходит через все CSV-файлы, он помещает все CSV-файлы в список [0]. Как я могу изменить свой код, чтобы достичь своей цели выше? Большое спасибо.

Джон

Вот код:

def create_data_lists(): i=0 for symbol in symbols: with open(symbols[i]+'.csv', 'r') as f: print i reader = csv.reader(f) reader.next() for row in reader: rowdata.append(row) data_by_symbol.append(rowdata) i=i+1 

2 Solutions collect form web for “Чтение CSV-файлов в списки Python”

внутри цикла for, рядом с вершиной, вам нужно обновить список rowdata . в противном случае вы добавите его навсегда. есть что-то вроде rowdata = [] сразу после print i

 def create_data_lists(): for symbol in symbols: with open(symbol+'.csv', 'r') as f: print symbol rowdata = [] reader = csv.reader(f) reader.next() for row in reader: rowdata.append(row) data_by_symbol.append(rowdata) 

EDIT избавился от i , так как я действительно не использую его

почему бы не сохранить самих читателей в списке?

 list_of_csv_files = [] for f in filenames: list_of_csv_files.append(csv.DictReader(open(f))) 

Это сохранит читатель в списке, что позволит вам потом сделать что-то вроде:

 for row in list_of_csv_files[0]: # do some processing on the row 

Самое большое преимущество этого метода заключается в том, что вы можете легко делать такие вещи, как столбцы фильтров, используя такие методы, как:

 one_row = [row["name of column heading"] for row in list_of_csv_files[0]] two_rows = [[row["name col 2"], row["name col 2"]] for row in list_of_csv_files[0]] 

который, как я подозреваю, будет более полезен для вашей программы, чем хранение предварительно прочитанных (и, следовательно, деструктурированных) CSV-файлов.

но если вы действительно хотите, чтобы все CSV-файлы были прочитаны и сохранены в списке, вам понадобится список списков, я не рекомендую это, он будет очень интенсивным в памяти:

 list_of_csv_files = [[]] for f in filenames: list_of_csv_files.append([row.values() for row in csv.DictReader(open(f))]) 
  • Попытка добавить суммы из файла csv в python
  • Pandas read_csv ожидает неправильное количество столбцов, с рваным файлом csv
  • Преобразовать файл csv в файл с разделителями строк в python
  • список экспорта и импорта из csv
  • Преобразование выбранных столбцов в csv в словарь
  • Поиск строки в CSV-файлах с использованием python и запись результатов
  • Как я могу отправить файл xls по одной строке за один раз через HTTP-ответ?
  • Преобразование больших csv в hdf5
  • Преобразование txt-файла с разделителями-табуляторами в файл csv с использованием Python
  • Запись csv внутри цикла
  • Python MemoryError: не может выделять память массива
  • Python - лучший язык программирования в мире.