我正在尝试从我无法控制的外部系统解析CSV文件.
示例CSV:
QW "" erty, "A" "B" "C" "d,EF" "" "克"
应解析为:
[['qw"erty', 'a"b"c"d,ef""g']]
Run Code Online (Sandbox Code Playgroud)
但是,我认为Python的csv模块不希望在单元格首先没有包含在引号字符中时转义引号字符.
csv.reader(my_file)
(默认情况下doublequote=True
)返回:
['qw""erty', 'a"b"c"d,ef""g']
Run Code Online (Sandbox Code Playgroud)
有没有办法用python csv模块解析这个?
继@JackManey评论后,他建议用'""'
双引号替换所有双引号实例'\\"'
.
认识到,如果我们现在是双引号细胞内竟然是不必要的,我们可以更换的所有实例'""'
用'\\"'
.
Python文档说:
在阅读时,escapechar从以下字符中删除任何特殊含义
但是,在原始单元格已经包含转义字符的情况下,这仍然会中断,例如:'qw\\\\""erty'
生成[['qw\\"erty']]
.所以我们必须在解析之前转义转义字符.
最终解决方案
with open(file_path, 'rb') as f:
content = f.read().replace('\\', '\\\\').replace('""', '\\"')
reader = csv.reader(StringIO(content), doublequote=False, escapechar='\\')
return [row for row in reader]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7556 次 |
最近记录: |