我正在使用Python解析逗号分隔的文件,其中一些文本字段用引号双重分隔,因为文本包含非分隔逗号。例如,给定这一行输入:
field_1,field_2,...,"this,field,contains,non-delimiting,commas",...,field_n
我需要将"this,field,contains,non-delimiting,commas"
视为包含讨厌逗号的单引号分隔字段。
我的代码通过比较每行输入中所有逗号和引号的索引并在成对引号之外的所有逗号的索引处切换行来处理此事。
然而,这让我觉得不像Pythonic,而且我希望得到一些可以获得更多Pythonic解决方案的建议。
答案 0 :(得分:3)
这是the csv
module使用csv.QUOTE_MINIMAL
quoting
直接处理的内容(作为excel
方言的一部分,可能是其他方言)。
将csv.reader
与适当的标记一起使用,请不要自行解析。
答案 1 :(得分:0)
您可以使用相当简单的generator来完成此任务。
def tokenize(input):
outstr = ""
stringmode = False
for char in input:
if char == "," and not stringmode:
yield outstr
outstr = ""
continue
elif char == "'" or char == '"':
stringmode = not stringmode
outstr += char
首先,我们将输入转换为自身的反转列表,以便我们可以有效地从字符串的前面弹出字符。然后我们简单地循环遍历字符串,当我们到达逗号并且不在引号中时产生,并在每次我们到达报价时切换是否在引用中