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']]