我有一个CSV文件,其中一行是:
Value1|Due Date: 01/01/2000 \|||Value5
预期结果:
FieldName1|FieldName2 |FieldName3|Fieldname4|FieldName5
Value1 |Due Date: 01/01/2000 | | |Value5
实际结果:
FieldName1|FieldName2 |FieldName3|Fieldname4|FieldName5
"Value1" |"Due Date: 01/01/2000 |"|"" |"Value5"
我用下面的代码来阅读它:reader = csv.reader(infile, delimiter = '|', doublequote = False, escapechar = '\\')
由于转义字符,它将第二个字段后面的列分隔符作为第二个字段的一部分进行解析,并忽略下一个空字段(field3)。
我的代码:
reader = csv.reader(infile, delimiter = '|', doublequote = False, escapechar = '\\')
writer = csv.writer(outfile, delimiter = '|', quoting = csv.QUOTE_ALL)
我应该如何设置阅读器?或者我应该在阅读文件之前删除反斜杠?你有其他的想法吗?
3条答案
按热度按时间nhaq1z211#
用
escapechar
定义Dialect
,它从来没有出现在你的文件中,我建议你尝试使用NUL,让file.csv
的内容那么
给出输出
注意,
\
需要转义以获得文本\
,从而获得\\
。smtd7mpg2#
你太复杂了,让
csv
模块以最小的干扰完成它的工作:6fe3ivhb3#
在标准字符串中键入
\\
时,python将存储一个 single 反斜杠这意味着你将转义字符定义为一个反斜杠,Python因此阅读:
是为了逃避“|“字符,即使其成为(前面的)字符串的一部分,而不是分隔符。
因为没有什么特别的含义,它默认回被解释为正常“|“字符:日期末尾的那个,因此Python正确地运行了你给它的指令。
根据您的预期,我认为您希望删除
\
如果是这种情况,只需将
\
替换为空字符串。