【问题标题】:How can Python be used to write line breaks to a csv as '\n'?如何使用 Python 将换行符写入 csv 为 '\n'?
【发布时间】:2017-04-29 07:14:07
【问题描述】:

我需要重新定义以下代码,以便行数据中的任何换行符(将显示为空白行)在写入的文件中显示为'\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'])

【问题讨论】:

  • 如果你想在输出文件中得到\n,试试testData.writerow('\\n')..
  • 要转义的换行符在哪里?实际行内容中有没有,意思是row[x].replace('\n', '\\n').encode('utf-8')?或者你的意思是每行之间的空行应该有一个转义的换行符,意思是testData.writerow(['\\n'])
  • 是的,我刚刚尝试了@101 的建议,即替换行内容中的换行符。如果适用,请随意格式化为答案。

标签: python csv newline


【解决方案1】:

您需要使用replace method 手动将换行符替换为\n

lineterminator 选项设置为所需的字符序列。有关其他可用内容的更多信息,请参见 the docs

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])

【讨论】:

  • 感谢您的回复。但是,这似乎会保留行数据中的空白行。在最初的cmets中,有人提到'\\n'``, and row[x].replace('\n', '\\n').encode('utf-8')成功地将空行替换为'\n'
  • 如果换行符在 data 本身中,您必须自己用文字 \n 序列替换它们。您可以在生成新行时进行替换。
【解决方案2】:

我猜这与\ 是 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 \\

【讨论】:

    猜你喜欢
    • 2017-09-29
    • 2019-03-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    相关资源
    最近更新 更多