防止 Python CSV Writer 在双引号数据中转义换行符

问题描述 投票:0回答:1

我编写了一个 py 脚本,它接受 CSV 文件、验证并更正它。问题是结果并不如预期。当一行有一个看起来像这样的字段

'\n70101010'
并且我想在
csv.reader
中逐行读取时,它会将其识别为单行而不是多行。关于如何解决这个问题有什么建议吗?以下是片段:

with open(file_path, mode="r", encoding="ansi") as file:
    reader = csv.reader(file, delimiter=";")
    writer = csv.writer(other_file, delimiter=";")

    header = next(reader)
    writer.writerow(header)

    for row in reader:
    print(row)
    writer.writerow(row)

这工作正常,除了一个条件之外,它会一一打印和写入所有行(行)。

对于看起来像这样的线条,它有效

['6009133774', '6009133774-001', '000000000070100047', '']

然后有一些看起来像这样的行不起作用

[' 701010101', '6088883774-067', '000001234550100088', '']

假设我读取并写入这些行:

  • ['6009133774', '6009133774-001', '000000000070100047', '']
  • ['6007892555', '6005171814-301', '007897904735800143', '']
  • [' 701010101', '6088883774-067', '000001234550100088', '']

写入的csv文件最后看起来像这样:

My;Header;With;Some;Titles;....;
6009133774;6009133774-001;000000000070100047;;
6007892555;6005171814-301;007897904735800143;;"
701010101";6088883774-067;000001234550100088;;

您可以看到第 2 行和第 3 行之间额外的双引号,以转义 。如何摆脱它?

附注我尝试通过正则表达式过滤它,但 file.read() 没有显示“ “所以我无法过滤整个文件。

python csv line-breaks
1个回答
0
投票

file.read() 不显示“ “所以我无法过滤整个文件。

我不确定你的意思,但你能尝试一下吗?

with open(file_path, mode="r", encoding="ansi") as file:

    reader = csv.reader(file, delimiter=";")
    writer = csv.writer(other_file, delimiter=";")

    header = next(reader)
    writer.writerow(header)

    for row in reader:

        # escape every "\n" replacing it by "\\n":
        row = "\\n".join(row.split("\n"))

        print(row)
        writer.writerow(row)

它应该禁止作者将

"\n"
解释为返回。

© www.soinside.com 2019 - 2024. All rights reserved.