Python CSV字符串转数组

249 投票
11 回答
332690 浏览
提问于 2025-04-16 01:40

有没有人知道有什么简单的库或者函数,可以把一个用csv格式编码的字符串解析成数组或者字典?

我觉得我不想用内置的csv模块,因为我看到的所有例子都是处理文件路径,而不是字符串。

11 个回答

29

官方文档关于 csv.reader() 的内容非常有帮助,你可以在这里找到:https://docs.python.org/2/library/csv.html。文档中提到:

文件对象和列表对象都是合适的选择。

import csv

text = """1,2,3
a,b,c
d,e,f"""

lines = text.splitlines()
reader = csv.reader(lines, delimiter=',')
for row in reader:
    print('\t'.join(row))
86

简单来说,csv模块也可以和列表一起使用:

>>> a=["1,2,3","4,5,6"]  # or a = "1,2,3\n4,5,6".split('\n')
>>> import csv
>>> x = csv.reader(a)
>>> list(x)
[['1', '2', '3'], ['4', '5', '6']]
363

你可以使用 io.StringIO 把一个字符串转换成文件对象,然后把这个对象传给 csv 模块来处理。

from io import StringIO
import csv

scsv = """text,with,Polish,non-Latin,letters
1,2,3,4,5,6
a,b,c,d,e,f
gęś,zółty,wąż,idzie,wąską,dróżką,
"""

f = StringIO(scsv)
reader = csv.reader(f, delimiter=',')
for row in reader:
    print('\t'.join(row))

如果想要更简单一点,可以用 split() 方法按换行符来分割字符串:

reader = csv.reader(scsv.split('\n'), delimiter=',')
for row in reader:
    print('\t'.join(row))

或者你也可以直接用 split() 方法把这个字符串按 \n(换行符)分成多行,然后再把每一行用 split() 分割成值。不过这样做的时候,你需要注意引号的问题,所以使用 csv 模块会更好一些。

Python 2 中,你需要这样导入 StringIO

from StringIO import StringIO

而不是其他方式。

撰写回答