繁体   English   中英

python 将带有逗号内部值的 CSV 转换为字典

[英]python convert CSV with comas inside values into Dictionary

我需要处理一些我无法控制的外部提供商提供的 CSV 数据。

数据具有固定数量的列,但具有可变数量的行。

总而言之,它可能如下所示:

Version,Relative Path,Author,Date,Comment,Link
1,somePath,someperson,01/20/2020,"Some phrase with punctuation including comas, but in which case it seems to be automatically formatted with quotes...",some.url
3,somePath,someperson,01/20/2020,Simple comment with no punctuation,another.url
50,somePath,someperson,01/20/2020,Another comment,some.url

AFAIK 对我来说最好的方法是使用这个:

import csv

with open("sample.csv", "r") as csvFile:
    reader = csv.DictReader(csvFile)
    data = {}
    for row_dict in reader:
        for key, value in row_dict.items():
            data[key] = data.get(key, []) + [value]

print(data)

结果看起来很棒:除了“评论”列,因为评论有标点符号,并且 CSV 分隔符是, ,这导致脚本将这些命令分成不同的项目并弄乱字典。

我希望我可以要求提供商为我制作一个特定的 CSV output ,但这不太可能发生。

但是:看起来在引号"之间提供了包含此类逗号的任何注释项。所以我想知道是否可以以某种方式使分隔符忽略引号之间的任何内容?

或者,如果您有更好的方法来获得相同的结果,我可以接受。 虽然我只能使用原版 python 3.10.2,但没有像 numpy 这样的模块(尽管我很喜欢)。 如果解决方案是编辑 CSV 的内容,那么它应该保留评论中的逗号。

这是我解决类似情况的方法...

quote_character='"'    
file_reader = csv.DictReader(csvfile, delimiter=delimiter, quotechar=quote_character,
                                             restkey='unrecognized_cols')

注意quotechar参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM