我编写了一个 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', '']
假设我读取并写入这些行:
写入的csv文件最后看起来像这样:
My;Header;With;Some;Titles;....;
6009133774;6009133774-001;000000000070100047;;
6007892555;6005171814-301;007897904735800143;;"
701010101";6088883774-067;000001234550100088;;
您可以看到第 2 行和第 3 行之间额外的双引号,以转义 。如何摆脱它?
附注我尝试通过正则表达式过滤它,但 file.read() 没有显示“ “所以我无法过滤整个文件。
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"
解释为返回。