Python的csvstring数组
任何人都知道一个简单的库或函数来parsing一个CSV编码的string,并将其变成一个数组或字典?
我不认为我想要内置csv模块,因为在我看到的所有例子中,使用文件path,而不是string。
我会使用StringIO
:
try: # for Python 2.x from StringIO import StringIO except ImportError: # for Python 3.x from io import StringIO import csv scsv = """text,with,Polish,non-Latin,lettes 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))
或者,您可以简单地将该stringsplit()
\n
为\n
作为分隔符,然后split()
每行split()
为值,但这样您必须注意引用,所以首选使用csv
模块。
简单 – 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']]
正如其他人已经指出的,Python包含一个读取和写入CSV文件的模块。 只要input字符保持在ASCII限制范围内,它就可以工作得很好。 如果你想处理其他编码,需要更多的工作。
csv模块的Python文档实现了csv.reader的扩展,它使用相同的接口,但可以处理其他编码并返回unicodestring。 只需复制并粘贴文档中的代码。 之后,您可以像这样处理一个CSV文件:
with open("some.csv", "rb") as csvFile: for row in UnicodeReader(csvFile, encoding="iso-8859-15"): print row
>>> a = "1,2" >>> a '1,2' >>> b = a.split(",") >>> b ['1', '2']
parsingCSV文件
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
https://docs.python.org/2/library/csv.html?highlight=csv#csv.reader
csvfile可以是任何支持迭代器协议的对象,每次调用next()方法时都会返回一个string
因此,一个StringIO.StringIO()
, str.splitlines()
甚至一个生成器都是好的。
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))
根据文档:
虽然模块不直接支持parsingstring,但可以轻松完成:
import csv for row in csv.reader(['one,two,three']): print row
只要把你的string变成一个单一的元素列表。
当这个例子明确地在文档中时,导入StringIO似乎有点过分。
这是另一种解决scheme:
>>> 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']]
这里是文档
使用它可以将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']]