猿问

当某些值包含分隔符作为值的一部分时,如何将 "key=value, key=value, ..."

我有一个格式的数据集,key1=value1, key2=value2, key3=value3...其中每个键值对由", ".


但是,某些值是包含", "作为值的一部分的长字符串。


如何正确浏览这些数据并将其转换为 csv?


我试过使用 a 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]     


一只萌萌小番薯
浏览 159回答 2
2回答

ITMISS

您可以re.findall使用itertools.groupby:import re, itertools as itdef 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'}]

梵蒂冈之花

使用@Ajax1234 的示例,re.split()并向前看:import restr="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']
随时随地看视频慕课网APP

相关分类

Python
我要回答