Я пытаюсь добавить новую строку в мой старый файл csv. В основном, он обновляется каждый раз, когда я запускаю скрипт Python.
Прямо сейчас я храню старые значения строк csv в списке, а затем удаляет файл csv и снова создаю его с новым значением списка.
Хотел бы знать, есть ли лучше способы сделать это.
with open('document.csv','a') as fd:
fd.write(myCsvRow)
Открытие файла с параметром 'a' позволяет добавлять в конец файла вместо простой перезаписи существующего содержимого. Попробуйте это.
Я предпочитаю это решение, используя модуль csv из стандартной библиотеки и оператора with, чтобы не оставлять файл открытым.
Ключевым моментом является использование 'a' для добавления при открытии файл.
import csv
fields=['first','second','third']
with open(r'name', 'a') as f:
writer = csv.writer(f)
writer.writerow(fields)
В Windows могут возникнуть лишние новые строки. Вы можете попытаться избежать их, используя 'ab' вместо 'a'.
Вы открываете файл с режимом «a» вместо «w»?
См. Чтение и запись файлов в документах python
7.2. Чтение и запись файлов open () возвращает объект-файл и чаще всего используется с двумя аргументами: open (имя файла, режим).>>> f = open('workfile', 'w')
>>> print f <open file 'workfile', mode 'w' at 80a0960>
Первый аргумент - это строка, содержащая имя файла. Второй аргумент - это другая строка, содержащая несколько символов, описывающих способ использования файла. mode может быть «r», когда файл будет считан только «w» только для записи (существующий файл с тем же именем будет удален), а «a» открывает файл для добавления; любые данные, записанные в файл, автоматически добавляются в конец. 'r +' открывает файл для чтения и записи. Параметр mode не является обязательным; 'r' будет приниматься, если он опущен. В Windows «b», добавленный в режим, открывает файл в двоичном режиме, поэтому существуют также такие режимы, как «rb», «wb» и «r + b». Python в Windows делает различие между текстовыми и двоичными файлами; конечные символы в текстовых файлах автоматически изменяются, когда данные считываются или записываются. Эта за кадром модификация файловых данных отлично подходит для текстовых файлов ASCII, но это приведет к повреждению двоичных данных, подобных этим в файлах JPEG или EXE. Будьте очень осторожны, чтобы использовать двоичный режим при чтении и записи таких файлов. В Unix не помешает добавить «b» в режим, поэтому вы можете использовать его платформу независимо для всех двоичных файлов. Основываясь на ответе @GM и обращая внимание на предупреждение @John La Rooy, я смог добавить новую строку, открыв файл в режиме 'a'.
Даже в окнах, в чтобы избежать проблемы с новой строкой, вы должны объявить ее как newline=''. Теперь вы можете открыть файл в режиме 'a' (без b).import csv
with open(r'names.csv', 'a', newline='') as csvfile:
fieldnames = ['This','aNew']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow({'This':'is', 'aNew':'Row'})
Я не пытался с обычным автором (без Dict), но я думаю, что все будет хорошо.