如何从csv文件中读取包含逗号的列表作为列?

Posted

技术标签:

【中文标题】如何从csv文件中读取包含逗号的列表作为列?【英文标题】:how to read list which contains comma from csv file as a column? 【发布时间】:2016-07-20 13:19:27 【问题描述】:

我想读取包含以下数据的 csv 文件:

Input.csv-

 10,[40000,1][50000,5][60000,14]
 20,[40000,5][50000,2][60000,1][70000,1][80000,1][90000,1]
 30,[60000,4]
 40,[40000,5][50000,14]

我想解析这个 csv 文件并逐行解析它。但是这些列表包含逗号(','),所以我没有得到正确的结果。

程序代码-

if __name__ == "__main__":

    with open(inputfile, "r") as f:
        reader = csv.reader(f,skipinitialspace=True)
        next(reader,None)
        for read in reader:
            no = read[0]
            splitted_record = read[1]          
            print splitted_record

输出-

[40000
[40000
[60000
[40000

我可以理解 read.csv 方法读取每列的逗号。但是我如何才能将整个列表读取为一列呢?

预期输出-

[40000,1][50000,5][60000,14]
[40000,5][50000,2][60000,1][70000,1][80000,1][90000,1]
[60000,4]
[40000,5][50000,14]

将内容写入其他文件-

name_list = ['no','splitted_record']
file_name = 'temp/'+ no +'.csv'
if not os.path.exists(file_name):
    f = open(file_name, 'a')
    writer = csv.DictWriter(f,delimiter=',',fieldnames=name_list)
    writer.writeheader()
else:
    f = open(file_name, 'a')
    writer = csv.DictWriter(f,delimiter=',',fieldnames=name_list)
writer.writerow('no':no,'splitted_record':splitted_record)

如何在没有引号 ("") 的情况下编写此 splitted_record?

感谢所有回复!

【问题讨论】:

为什么不 openread 没有 csv @Moses Koledoye- 这是 csv 文件,它的标题也没有,splitted_record 所以我正在阅读 csv.reader 逐行读取并用正则表达式分割 【参考方案1】:

您可以将这些项目连接在一起,因为您知道它们用逗号分隔

if __name__ == "__main__":

    with open(inputfile, "r") as f:
        reader = csv.reader(f,skipinitialspace=True)
        next(reader,None)
        for read in reader:
            no = read[0]
            splitted_record = ','.join(read[1:])          
            print splitted_record

输出

[40000,1][50000,5][60000,14]
[40000,5][50000,2][60000,1][70000,1][80000,1][90000,1]
[60000,4]
[40000,5][50000,14]

---更新--- 数据就是上面的输出

with open(filepath,'wb') as f:
     w = csv.writer(f)
     for line in data:
         w.writerow([line])

【讨论】:

@galaxyan- 工作文件,但在将此记录写入另一个文件时遇到双引号 ("")。我可以在写作时也将其删除吗? @kit 加入后,数据变成字符串,所以当你写入文件时,它上面会有“”。我想知道您是否要将字符串更改为列表列表。 @galaxyan- 我不想将字符串更改为列表列表,我只想保持我的输出文件像 [40000,1][50000,5][60000,14 ] 不带引号而不是 "[40000,1][50000,5][60000,14]" 带引号 (")。 @galaxyan 不是“cote”而是“quote” @galaxyan 你写的如何在输出文件中显示引号?【参考方案2】:

您可以使用自己的方言并将其注册为您需要的阅读。 https://docs.python.org/2/library/csv.html

【讨论】:

以上是关于如何从csv文件中读取包含逗号的列表作为列?的主要内容,如果未能解决你的问题,请参考以下文章

读取所有列合并为一个的csv文件:千位逗号问题

如何从字符向量中解析 CSV 数据以提取数据框?

在 Spark 中读取最后一列作为值数组的 CSV(并且值在括号内并用逗号分隔)

读取包含嵌入逗号的引用字段的 csv 文件

CSV 解析包含双引号和逗号的字符串

如何将 csv 文件转换为可作为文本读取的列表列表? Python