В этом разделе показаны наиболее встречающиеся приемы работы с модулем csv
.
Для предварительного анализа данных, содержащихся в CSV-файле, рекомендуем посмотреть в сторону CLI модуля
csvkit
.
import csv with open('some.csv', newline='') as fp: reader = csv.reader(fp) for row in reader: print(row)
import csv with open('passwd', newline='') as f: reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE) for row in reader: print(row)
import csv with open('some.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerows(someiterable)
Поскольку функция open()
используется для открытия файла CSV для чтения, то файл по умолчанию будет декодирован в Unicode с использованием системной кодировки locale.getpreferredencoding()
. Чтобы декодировать файл, используя другую кодировку, используйте соответствующий аргумент встроенной функции open()
:
import csv with open('some.csv', newline='', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: print(row)
То же самое относится и к записи в кодировке, отличной от системной. Просто укажите аргумент кодировки при открытии файла на запись.
import csv csv.register_dialect('unixpwd', delimiter=':', quoting=csv.QUOTE_NONE) with open('passwd', newline='') as f: reader = csv.reader(f, 'unixpwd')
import csv, sys filename = 'some.csv' with open(filename, newline='') as f: reader = csv.reader(f) try: for row in reader: print(row) except csv.Error as e: sys.exit(f'file {filename}, line {reader.line_num}: {e}')
И хотя модуль не поддерживает синтаксический анализ напрямую, это легко сделать:
import csv for row in csv.reader(['one,two,three']): print(row) # ['one', 'two', 'three']