сохранение всех записей пользовательских входов в csv с использованием фляжки python [duplicate]

Я пытаюсь добавить новую строку в мой старый файл csv. В основном, он обновляется каждый раз, когда я запускаю скрипт Python.

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

Хотел бы знать, есть ли лучше способы сделать это.

104
задан 6 October 2015 в 16:22

5 ответов

with open('document.csv','a') as fd:
    fd.write(myCsvRow)

Открытие файла с параметром 'a' позволяет добавлять в конец файла вместо простой перезаписи существующего содержимого. Попробуйте это.

135
ответ дан 15 August 2018 в 15:51
  • 1
    Я попытался fp = open (csv_filepathwithname, 'wa') writer = csv.writer (fp) somelist = [3,56,3,6,56] writer.writerow ((somelist)), но только последняя строка добавляется в файл. – laspal 2 March 2010 в 18:49

Я предпочитаю это решение, используя модуль 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'.

80
ответ дан 15 August 2018 в 15:51

Вы открываете файл с режимом «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» в режим, поэтому вы можете использовать его платформу независимо для всех двоичных файлов.
10
ответ дан 15 August 2018 в 15:51
  • 1
    может быть, вы могли бы сделать свой ответ более подробным, тогда это будет выглядеть как реальный ответ :-) – user702846 29 July 2011 в 17:10
  • 2
    @user, я добавил ссылку - это вам поможет? – John La Rooy 30 July 2011 в 01:08

Основываясь на ответе @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), но я думаю, что все будет хорошо.

0
ответ дан 15 August 2018 в 15:51
[F1]
0
ответ дан 15 August 2018 в 15:51
  • 1
    Исправьте свой отступ. Ответы также дают объяснение - и эти ответы также привлекают больше внимания. – Mr. T 16 March 2018 в 02:50
  • 2
    Это какой-то простой код, он открывает файл для режима добавления, записывает заголовок rec, а затем работает через записи видео в aList. – markkaufman 21 March 2018 в 22:12

Другие вопросы по тегам:

Похожие вопросы: