假设我创建了一个包含两行的csv:
>>> import csv
>>> csvfile = csv.writer(open('test.csv', 'w'))
>>> csvfile.writerow(['row'])
5
>>> csvfile.writerow(['row2'])
6
阅读时,我得到了一个最后的新行:
>>> open('test.csv').read()
'row\nrow2\n'
当然,这可以预期,但在我的情况下,我宁愿不要使用它,因为它更容易解释:在进行拆分时无需检查空行。
>>> open('test.csv').read().split('\n')
['row', 'row2', '']
答案 0 :(得分:2)
作为一种解决方法,您可以使用StringIO()
对象进行写入。然后,在写入文件之前,输出可以应用rstrip()
:
from io import StringIO
import csv
output = StringIO(newline='')
csvfile = csv.writer(output)
csvfile.writerow(['row'])
csvfile.writerow(['row2'])
with open('test.csv', 'w', newline='') as f_output:
f_output.write(output.getvalue().rstrip())
这样可以保留CSV库的全部功能。我会建议你保留尾随换行符。
对于迭代方法:
from io import StringIO
import csv
data = [['row'], ['row2']]
with open('test.csv', 'w', newline='') as f_output:
iter_data = iter(data)
next_row = next(iter_data)
csv_writer = csv.writer(f_output)
for row in iter_data:
csv_writer.writerow(next_row)
next_row = row
# Write the last row to a string to remove trailing newline
last_row = StringIO(newline='')
csv.writer(last_row).writerow(next_row)
f_output.write(last_row.getvalue().rstrip())
这会一次写入一行数据,然后使用StringIO()
方法处理最后一行以删除尾随换行符。
答案 1 :(得分:0)
经过一番调查后,我找到了作者:https://hg.python.org/cpython/file/tip/Modules/_csv.c#l1254
而且,根据我的猜测,有no such option in there
答案 2 :(得分:-1)
这样做:
open('test.csv').read().strip('\n').split('\n')