问题:Python CSV字符串到数组
有人知道一个简单的库或函数来解析csv编码的字符串并将其转换为数组或字典吗?
我不认为我想要内置的csv模块,因为在所有示例中,我看到的都是文件路径,而不是字符串。
回答 0
您可以使用将字符串转换为文件对象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
首选使用module。
在Python 2上,您必须导入StringIO
为
from StringIO import StringIO
代替。
回答 1
简单-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']]
回答 2
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))
回答 3
>>> a = "1,2"
>>> a
'1,2'
>>> b = a.split(",")
>>> b
['1', '2']
解析CSV文件:
f = open(file.csv, "r")
lines = f.read().split("\n") # "\r\n" if needed
for line in lines:
if line != "": # add other needed checks to skip titles
cols = line.split(",")
print cols
回答 4
回答 5
根据文档:
尽管该模块不直接支持解析字符串,但可以轻松实现:
import csv
for row in csv.reader(['one,two,three']):
print row
只需将您的字符串转换为单个元素列表即可。
当这个例子在文档中明确时,导入StringIO对我来说似乎有点多余。
回答 6
https://docs.python.org/2/library/csv.html?highlight=csv#csv.reader
csvfile可以是任何支持迭代器协议的对象,并且每次调用其next()方法时都会返回一个字符串
因此,一个StringIO.StringIO()
,str.splitlines()
甚至一个生成器都很好。
回答 7
这是一个替代解决方案:
>>> import pyexcel as pe
>>> text="""1,2,3
... a,b,c
... d,e,f"""
>>> s = pe.load_from_memory('csv', text)
>>> s
Sheet Name: csv
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| a | b | c |
+---+---+---+
| d | e | f |
+---+---+---+
>>> s.to_array()
[[u'1', u'2', u'3'], [u'a', u'b', u'c'], [u'd', u'e', u'f']]
这是文档
回答 8
使用此功能将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']]
回答 9
Panda是功能强大且智能的库,可使用Python读取CSV
这里有一个简单的例子,我有example.zip文件,其中有四个文件。
EXAMPLE.zip
-- example1.csv
-- example1.txt
-- example2.csv
-- example2.txt
from zipfile import ZipFile
import pandas as pd
filepath = 'EXAMPLE.zip'
file_prefix = filepath[:-4].lower()
zipfile = ZipFile(filepath)
target_file = ''.join([file_prefix, '/', file_prefix, 1 , '.csv'])
df = pd.read_csv(zipfile.open(target_file))
print(df.head()) # print first five row of csv
print(df[COL_NAME]) # fetch the col_name data
有了数据后,您就可以操纵播放列表或其他格式。