任何想法如何可以读取为CSV? – Python

我有一个CSV格式化如下:

ID = 123 [DLE] KEY =testing[DLE] KEY2 = VAL123

其中[DLE]是“数据链接转义”控制字符


任何想法如何我可以使用这与csv标准库?

我是否需要编辑每一行以使其兼容?

编辑:我的主要问题是“KEY = VALUE”格式

多谢你们

您的数据实际上不是CSV格式,所以我会放弃尝试使用它。 我要做的就是写一个发生器,把每一行都做成.split('\x10') ,然后在每一行上做.split('=', 1) ,然后把整个事情作为一个字典。

 def dgen(fin): for line in fin: yield dict(((k, v) for chunk in line.rstrip('\r\n').split('\x10') for (k, v) in chunk.split('=', 1))) 

你可以通过简单的覆盖分隔符来parsing它(假设雪人是你的DLE):

 import csv testdata='ID=123☃KEY=test☃KEY2=VAL123\nID=456☃KEY=test2☃KEY2=val456' testdataiter=testdata.splitlines() reader = csv.reader(testdataiter, delimiter='☃') for row in reader: print (','.join(row)) 

输出:

 ID=123,KEY=test,KEY2=VAL123 ID=456,KEY=test2,KEY2=val456 

检查csv模块的帮助 – 任何方言参数都可以在阅读器构造器中被覆盖。


要将KEY = VALparsing为字典,请更改为:

 ... for row in reader: rowdict = dict([x.split('=',1) for x in row]) print rowdict 

输出:

 {'KEY2': 'VAL123', 'ID': '123', 'KEY': 'test'} {'KEY2': 'val456', 'ID': '456', 'KEY': 'test2'} 

在Python中,您可以将csv模块传递给格式字符( csv module docs ):

 >>> import csv >>> spamReader = csv.reader(open('eggs.csv', 'rb'), delimiter=' ', quotechar='|') 

这是你在做什么?

 >>> fields = ["ID","KEY","KEY2"] >>> mydict = csv.DictReader(open("csv.txt","rbU"),delimiter=chr(16),fieldnames=field s) >>> mylist = [line for line in mydict] >>> mylist [{'KEY2': 'KEY2=VAL123', 'ID': 'ID=123', 'KEY': 'KEY=test'}] 

编辑:上面给出的更好的答案

 reader = csv.reader(open(datafile, "rb"), delimiter=chr(16)) data = (dict(tuple(i.split("=") for i in row)) for row in reader) 

会给你一个发电机。 你可以把它变成一个列表或一个元组。

 data_list = list(data) 

这将是一个列表的字典。

 [{'ID': '123', 'KEY': 'test', 'KEY2': 'VAL123'}, {'ID': '456', 'KEY': 'test2', 'KEY2': 'val456'}]