csv中的Python嵌套逗号
Posted
技术标签:
【中文标题】csv中的Python嵌套逗号【英文标题】:Python nested comma in csv 【发布时间】:2013-07-29 21:26:13 【问题描述】:我正在使用 Python 解析一个 csv 文件。
CSV 文件如下所示:
value1,value2,value3(a,b,c)
Python 代码:
with open(file_path, 'rb') as this_file:
reader = csv.reader(this_file, delimiter=',')
for row in reader:
print row
显然 CSV 阅读器将其解释为:
"value1","value2","value3(","a","b","c)"
阻止 Python 将 value2() 分解为四个值的最佳方法是什么?
谢谢。
【问题讨论】:
使用 csv 模块或在 excel 或 open office 中正确创建 csv 文件...如果您这样做,csv 管理器将正确转义嵌套的逗号 那么你希望它如何解释它?尽管可能很不方便,但您可以自己编写一些东西并使用 split()。如果您无法正确格式化 csv 文件,我会这样做。 您的 CSV 文件严重格式错误。在value3
周围加上引号,使其成为有效的 CSV 值。
Joran - 我无法控制 CSV 的生成。 @aleksander-lidtke - 我希望它是 val1、val2、val3(a,b,c)。我希望避免分裂。感谢您的回复!
并删除逗号后的空格。简而言之,这根本不是 CSV 文件。您可能需要编写自己的解析器。
【参考方案1】:
这是处理给定示例的代码:
a='value1, value2, value3(a, b, c)'
split=a.split(', ')
result=[]
for ent in split:
if ent.find('(', 0, len(ent))!=-1:
temp=''
for ent2 in split[split.index(ent):]:
if ent2.find('(', 0, len(ent))!=-1:
temp=temp+ent2
else:
temp=temp+','+ent2
split.remove(ent2)
#May need a check whether ) has not been reached yet, in which case don't add the items.
result.append(temp)
else:
result.append(ent)
如果在用括号括起来的条目之后是否存在一些“正常”条目(如评论中所示),则需要进行一些小检查,例如
a='value1, value2, value3(a, b, c)', 'value4'
希望这会有所帮助。抱歉,我想不出任何使用内置 csv 解析器的方法,因为您的文件实际上不是“正确”的 csv...
【讨论】:
感谢您的详细回复。我最终使用了类似的东西。 Value3 是一个已知字符串,所以我能够检查它,然后使用 list[:n] 和 list[n:] 来获得所需的输出。再次感谢!【参考方案2】:没有简单的方法可以打破值中的逗号。关于它有几个问题,许多人指出了这篇文章: https://***.com/a/769713/2620328
【讨论】:
以上是关于csv中的Python嵌套逗号的主要内容,如果未能解决你的问题,请参考以下文章