Python CSV insert final newline我怎么能避免呢?

2024-09-29 21:58:51 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我创建了一个包含两行的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', '']

Tags: csvcsvfiletestimportreadopen例子writer
3条回答

作为一种解决方法,您可以使用^{}对象进行写入。在写入文件之前,可以对输出应用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()方法处理最后一行,以删除尾随的换行符。你知道吗

请执行以下操作:

open('test.csv').read().strip('\n').split('\n')

经过一番调查,我找到了writerow源代码:https://hg.python.org/cpython/file/tip/Modules/_csv.c#l1254

而且,据我所知,有no such option in there

相关问题 更多 >

    热门问题