将带双引号的字符串拆分为列表

时间:2016-04-28 08:41:21

标签: python string list split

我必须将一个字符串拆分成列表。 输入如下:

data = '''00402,
"0042 01,5",5
0042 02,3
"0042 02,5",1
"0042 05,5",4
"0042 05,5X05,5",7'''

预期输出如下:

['00402'],['0042 01,5', '5'],['0042 02', '3'],['0042 02,5', '1'],['0042 05,5', '4'],['0042 05,5X05,5', '7']

到目前为止,我试图做的是:

temp_lines = filter(lambda x: x != '', data.split('\n'))
lines = []
for line in temp_lines:
    lines.append(re.split(';|,|\*|\t', line.replace("\r", "")))

print lines

这没有产生所需的输出。请帮助解决这个问题。

1 个答案:

答案 0 :(得分:3)

csv模块可以在这里为您提供帮助:

>>> import csv
>>> data = '''00402,
... "0042 01,5",5
... 0042 02,3
... "0042 02,5",1
... "0042 05,5",4
... "0042 05,5X05,5",7'''
>>> result = list(csv.reader(data.splitlines()))
>>> result
[['00402', ''], ['0042 01,5', '5'], ['0042 02', '3'], ['0042 02,5', '1'], ['0042 05,5', '4'], ['0042 05,5X05,5', '7']]

唯一的问题是第一个子列表中的空字符串,因为data的第一行有一个不遵循其他行格式的奇怪格式。如果空字段困扰您,请将其过滤掉:

>>> [[x for x in sub if x] for sub in result]
[['00402'], ['0042 01,5', '5'], ['0042 02', '3'], ['0042 02,5', '1'], ['0042 05,5', '4'], ['0042 05,5X05,5', '7']]