我似乎找不到正确的Python3 CSV阅读器参数来解析该特定CSV方言。生成CSV的事物的行为如下:
解析器信息:
生成此格式的CSV如何工作:
^这最后一点是导致我出现问题的原因,因为我特定行的第一个字段以反斜杠结尾。这会导致Python3 CSV解析器将第一个字段分隔符解释为已转义。
参见下文:
(xcve) ttucker@plato:~/tmp/csv$ python --version
Python 3.6.4
(xcve) ttucker@plato:~/tmp/csv$ cat test_csv.py
import csv
with open('exotic_dialect.csv') as f:
data = f.readlines()
reader = csv.reader(data, delimiter='^', quotechar='"',
escapechar='\\', quoting=csv.QUOTE_MINIMAL)
for row in reader:
print(row)
(xcve) ttucker@plato:~/tmp/csv$ cat exotic_dialect.csv
a^b^c
a|^b^c
"a\""^b^c
"a^"^b^c
a\^b^c
(xcve) ttucker@plato:~/tmp/csv$ python test_csv.py
['a', 'b', 'c']
['a|', 'b', 'c']
['a"', 'b', 'c']
['a^', 'b', 'c']
['a^b', 'c']
^ This last list should have three fields; i.e., ['a\', 'b', 'c']
因此,我的问题是:
答案 0 :(得分:0)
我不是该领域的专家,但是
1)可能不是。在这种情况下,您期望同一个转义字符可以做两种不同的事情,因此无法区分。这些CSV解析器通常会先转义字符 first 。
CSV解析器如何确定此示例的正确行为?
fo\^o^bar
["fo\","o","bar"]
["fo^o","bar"]
2)我个人将通过一些预处理来运行CSV,以便您可以正确解析文件(将\^
替换为\\^
)
答案 1 :(得分:0)
因此,首先对数据进行字符串替换并不是最好的主意,因为无法在不了解上下文的情况下确定是否应转义未转义的转义字符。我最终只写了自己的解析器。
+