如何用Python读取CSV文件中包含逗号的单个值

1 投票
3 回答
5835 浏览
提问于 2025-04-17 04:13

我有一个csv文件,里面包含了以下这些值:

"Spam2,pank",Spam3,Spam6,Spam7
Spam1,Spam5,Spam0,Spam9

我正在使用以下的Python代码来读取某一列:

for line in open('D:\eggs2.csv','rb'):
    columns = line.split(",")
    print columns[0]

它给出的输出是:

"Spam2
Spam1

而我期待的结果是:

Spam2,pank
Spam1

请帮帮我。

3 个回答

-1

你可以把它分成两次。第一次分的时候,得到的结果像是 '''"\w"''',也就是把引号里面的所有字母和数字都提取出来。这个结果会是一个列表,里面包含了每次分割后的内容。然后你再对每个列表进行第二次分割,这次是用 ',' 来分。最后,你把这些列表合并成一个简单的列表。

0

这要看你想把CSV文件读成什么样的数据结构。如果你这样做的话,数据会被加载到一个包含元组的列表里。每一行会成为列表中的一个条目,而每一行又会是一个字符串值的元组。

我建议你创建一个辅助函数来读取文件,我一直在用这个方法。

def readfile(filepath, delim):     
   with open(filepath, 'r') as f:         
      return [tuple(line.split(delim)) for line in f] 

data = readfile('D:\eggs2.csv', ',')

使用“with”有很多好处,比如它会自动处理文件的关闭、异常等问题,但你需要使用Python 2.7或更高版本。

如果将来你想用“|”作为分隔符或者其他什么分隔符,你就不需要重新写代码了。

7

你不需要重新发明轮子,Python 的 csv 模块已经做得很好了。

import csv

csv_file = open('D:\eggs2.csv','rb')
csv_reader = csv.reader(csv_file)
for row in csv_reader:
    print row[0]

csv_file.close()

更多信息请查看 python csv

撰写回答