Редактирование файла CSV с помощью Python

Могу ли я изменить встроенный CSV-файл, используя библиотеку CSV Python или аналогичную технику?

Current Я обрабатываю файл и обновляю первый столбец (поле имени), чтобы изменить форматирование. Упрощенная версия моего кода выглядит так:

with open('tmpEmployeeDatabase-out.csv', 'w') as csvOutput: writer = csv.writer(csvOutput, delimiter=',', quotechar='"') with open('tmpEmployeeDatabase.csv', 'r') as csvFile: reader = csv.reader(csvFile, delimiter=',', quotechar='"') for row in reader: row[0] = row[0].title() writer.writerow(row) 

Философия работает, но мне любопытно, могу ли я сделать встроенное редактирование, чтобы я не дублировал файл.

Я пробовал следовать, но это добавляет новые записи в конец файла, а не заменяет их.

 with open('tmpEmployeeDatabase.csv', 'r+') as csvFile: reader = csv.reader(csvFile, delimiter=',', quotechar='"') writer = csv.writer(csvFile, delimiter=',', quotechar='"') for row in reader: row[1] = row[1].title() writer.writerow(row) 

2 Solutions collect form web for “Редактирование файла CSV с помощью Python”

Нет, вы не должны пытаться писать в файл, который вы сейчас читаете. Вы можете сделать это, если будете продолжать seek после чтения строки, но это нецелесообразно, особенно если вы записываете больше данных, чем считаете.

Канонический метод заключается в том, чтобы записать в новый временный файл и переместить его на место поверх старого файла, который вы читаете.

 from tempfile import NamedTemporaryFile import shutil import csv filename = 'tmpEmployeeDatabase.csv' tempfile = NamedTemporaryFile(delete=False) with open(filename, 'rb') as csvFile, tempfile: reader = csv.reader(csvFile, delimiter=',', quotechar='"') writer = csv.writer(tempfile, delimiter=',', quotechar='"') for row in reader: row[1] = row[1].title() writer.writerow(row) shutil.move(tempfile.name, filename) 

Я использовал библиотеки tempfile и shutil чтобы облегчить задачу.

Не существует базового системного вызова для вставки данных в файл. Вы можете перезаписать, вы можете добавить, и вы можете заменить. Но вставка данных в середину означает чтение и переписывание всего файла с того момента, когда вы сделали свое редактирование до конца.

Таким образом, два способа сделать это: (a) удалить весь файл в память, внести изменения в него, а затем выгрузить результат на диск или (b) открыть временный выходной файл, в котором вы пишете свои результаты в то время как вы читаете входной файл, а затем заменяете старый файл новым, как только вы дойдете до конца. Один метод использует больше бара, а другой использует больше дискового пространства.

  • Элегантный способ пропустить первую строку при использовании модуля python fileinput?
  • Загрузка файла в массив numpy с помощью python
  • Как разделить и проанализировать большой текстовый файл в python в режиме экономии памяти?
  • Редактировать файл конфигурации через python
  • Режим файла для создания + чтения + добавление + двоичный файл
  • Анализ файлов журнала Apache
  • открыть файл в режиме «w»: IOError: Нет такого файла или каталога
  • Что произойдет, если я резко закрываю свой скрипт, пока он все еще выполняет операции ввода-вывода файлов?
  • Python - лучший язык программирования в мире.