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嵌套逗号的主要内容,如果未能解决你的问题,请参考以下文章

python - 如何将csv转换为python pandas中的嵌套json?

Python STL csv

Python入门教程第72篇 读取CSV文件

使用 Python 从 CSV 中删除不需要的逗号

Python解析csv文件 - 用冒号替换逗号

说说如何利用 Python 处理 CSV 文件