我有一个key1=value1, key2=value2, key3=value3...
格式的数据集,其中每个键值对之间用", "
隔开。
但是,某些值是包含", "
作为值一部分的长字符串。
如何正确查看此数据并将其转换为csv?
我尝试使用csv.reader
,但是它不起作用。
data = row.lstrip('(').rstrip(')\n')
reader = csv.reader(StringIO(data))
for row2 in reader:
my_dict = {}
for d in row2:
my_dict[d.split('=')[0].lstrip()] = d.split('=', 1)[1]
答案 0 :(得分:2)
您可以将re.findall
与itertools.groupby
一起使用:
import re, itertools as it
def get_vals(d):
r = [(a, list(b)) for a, b in it.groupby(re.findall('\w+\=|[^\s,]+', d), key=lambda x:x[-1] == '=')]
return {r[i][-1][0][:-1]:', '.join(r[i+1][-1]) for i in range(0, len(r), 2)}
tests = ['key1=value1, key2=value2, key3=value3', 'key1=va, lue1, key2=valu, e2, test, key3=value3']
print(list(map(get_vals, tests)))
输出:
[{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'},
{'key1': 'va, lue1', 'key2': 'valu, e2, test', 'key3': 'value3'}]
答案 1 :(得分:1)
使用@ Ajax1234的示例re.split()
并进行前瞻:
import re
str="key1=value1, key2=value2, key3=value3, key1=va, lue1, key2=valu, e2, test, key3=value3"
re.split(", (?=[^ ]+=)",str)
['key1=value1', 'key2=value2', 'key3=value3', 'key1=va, lue1', 'key2=valu, e2, test', 'key3=value3']