Csv.write пропускает строки при записи в csv
Я пытаюсь записать файл csv с помощью следующих
file = open('P:\test.csv', 'a')
fieldnames = ('ItemID', 'Factor', 'FixedAmount')
wr = csv.DictWriter(file, fieldnames=fieldnames)
headers = dict((n, n) for n in fieldnames)
wr.writerow(headers)
wr.writerow({'ItemID':1, 'Factor': 2, 'FixedAmount':3})
Однако, когда я смотрю на csv файл, первая строка пуста, вторая строка - мой заголовок, третья строка снова пуста, а четвертая запись показывает записи 1,2 и 3. почему онa > пропустить одна строка перед записью?
EDIT: использование python 3.2
Ответы
Ответ 1
Решение состоит в том, чтобы указать параметр "определитель" в конструкторе:
file = open('P:\test.csv', 'w')
fields = ('ItemID', 'Factor', 'FixedAmount')
wr = csv.DictWriter(file, fieldnames=fields, lineterminator = '\n')
wr.writeheader()
wr.writerow({'ItemID':1, 'Factor': 2, 'FixedAmount':3})
file.close()
Ответ 2
Двадцать quatloos говорит, что вы работаете под окнами (ну, сто, учитывая, что ваш файл называется P:\test.csv
). Вероятно, вы получаете дополнительные \r
s.
[править]
Хорошо, поскольку использование двоичного режима вызывает другие проблемы, как насчет этого:
file = open('P:\test.csv', 'w', newline='')
Ответ 3
Может быть, вы открываете выходной файл в режиме добавления?
file = open('P:\test.csv', 'a')
# ^
Вместо режима записи? Если вы запускаете программу несколько раз, результат каждого запуска будет в этом файле...
Ответ 4
У меня была эта проблема, и это было потому, что я использовал \n\r. Я изменил на \n, и теперь он работает.
Ответ 5
Вам нужно передать дополнительный параметр функции 'open()':
file = open('P:\test.csv', 'a', newline='')
Это будет держать его от пропусков строк.