有人知道一个简单的库或函数来解析csv编码的字符串并将其转换为数组或字典吗?
我不认为我需要内置csv模块,因为在我看到的所有例子中,它接受文件路径,而不是字符串。
有人知道一个简单的库或函数来解析csv编码的字符串并将其转换为数组或字典吗?
我不认为我需要内置csv模块,因为在我看到的所有例子中,它接受文件路径,而不是字符串。
当前回答
可以使用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))
或者你可以简单地用\n作为分隔符将()这个字符串分割成行,然后将()每一行分割成值,但这样你必须知道引用,所以使用csv模块是首选。
在Python 2上,你必须导入StringIO为
from StringIO import StringIO
代替。
其他回答
可以使用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))
或者你可以简单地用\n作为分隔符将()这个字符串分割成行,然后将()每一行分割成值,但这样你必须知道引用,所以使用csv模块是首选。
在Python 2上,你必须导入StringIO为
from StringIO import StringIO
代替。
简单- 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']]
使用此命令将csv文件加载到列表中
import csv
csvfile = open(myfile, 'r')
reader = csv.reader(csvfile, delimiter='\t')
my_list = list(reader)
print my_list
>>>[['1st_line', '0'],
['2nd_line', '0']]
对于任何仍然在寻找将标准CSV str转换为列表[str]以及反向的可靠方法的人来说,这里有两个函数,我从这个和其他SO线程中的一些答案组合在一起:
def to_line(row: list[str]) -> str:
with StringIO() as line:
csv.writer(line).writerow(row)
return line.getvalue().strip()
def from_line(line: str) -> list[str]:
return next(csv.reader([line]))
根据文档:
虽然该模块不直接支持解析字符串,但可以轻松完成:
import csv
for row in csv.reader(['one,two,three']):
print row
只需将字符串转换为单个元素列表。
当这个例子显式地出现在文档中时,导入StringIO对我来说似乎有点过分。