Python CSV字符串转数组
有没有人知道有什么简单的库或者函数,可以把一个用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
而不是其他方式。