Подтвердить что ты не робот

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

4b9b3361

Ответ 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='')

Это будет держать его от пропусков строк.