如何使用Python将换行符写入CSV文件中作为“\n”?

10

我需要重新定义下面的代码,使得行数据中的任何换行符(会显示为空白行)在写入文件时显示为'\n'

但是,'\n'需要在每行后面写入,以显示为空白行。

显然需要将每行编码为'utf-8'以避免错误。

with open('csvfile.csv', 'w') as csvOutput:
    testData = csv.writer(csvOutput, delimiter='|', escapechar=' ', quoting=csv.QUOTE_NONE)

    for row in data:
        newRow = [row[x].encode('utf-8') for x in xrange(len(row))]
        testData.writerow(newRow)
        testData.writerow(['\n'])

3
如果你想在输出文件中得到\n,请尝试使用testData.writerow('\\n') - 101
你想转义哪些换行符?实际行内容中有吗,例如 row[x].replace('\n', '\\n').encode('utf-8')?还是说你的意思是每一行之间的空行应该有一个转义的换行符,例如 testData.writerow(['\\n']) - TigerhawkT3
是的,我刚刚尝试了@101建议中替换行内容的方法,效果很好。如果适用的话,请随意将其格式化为答案。 - ballade4op52
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
9
你需要使用 replace 方法 手动将换行符替换为 \n。 将 lineterminator 选项设置为所需的字符序列。更多信息可在文档中查看其他可用选项。
with open('csvfile.csv', 'w') as csvOutput:
    writer = csv.writer(csvOutput, delimiter='|', escapechar=' ', quoting=csv.QUOTE_NONE, lineterminator='\n')

    for row in data:
        writer.writerow([s.replace('\n', '\\n').encode('utf-8') for s in row])

1
感谢您的回复。然而,这似乎保留了行数据中的空白行。在最初的评论中,有人提到了'\\n',并且row[x].replace('\n', '\\n').encode('utf-8')成功地用\n替换了空白行。 - ballade4op52
如果换行符在_data_本身中,则必须自行使用文字\n序列替换它们。您可以在生成新行时进行替换。 - Jeff Mercado
这太糟糕了。我本来期望csv模块能自动处理转义,而不是依赖于用户指定的hack。这有点违背使用csv模块的初衷,反而要依靠Python字符串分割。 - John Jiang
@JohnJiang 我不同意。它正在做它应该做的事情,将数据行格式化为csv规范。当然,如果它能够提供更多的自定义功能,那就更好了。它不会改变数据的内容或含义,因为这不是它的目的。简而言之,数据包含字符序列 '\n',它必须保留。如果您想更改数据以使该序列不同,则必须单独完成。如何完成取决于其设计方式。 - Jeff Mercado

1
我猜这与Python中的转义字符\有关。\\被解释为实际的\字符串。因此,您的代码应该如下所示:
with open('csvfile.csv', 'w') as csvOutput:

    testData = csv.writer(csvOutput, delimiter='|', escapechar=' ', quoting = csv.QUOTE_NONE)


    for row in data:
        newRow = [row[x].encode('utf-8') for x in xrange(len(row))]
        testData.writerow(newRow)
        testData.writerow('\\n') #Note the final row with \\

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,