Python - 将字符串拆分为参数

时间:2015-07-27 08:33:06

标签: python string split numbers

我是Python的新手,我有一个字符串拆分问题,我需要帮助

input = "\"filename.txt\", 1234,8973,\"Some Description \""

input包含字符串&数字,可能存在引导和拖尾空间的情况

预期输出应为

['filename.txt', '1234', '8973', 'Some Description']

可以拆分完成工作还是需要正则表达式?

7 个答案:

答案 0 :(得分:8)

使用csv module来处理这样的输入;它处理引用,可以讲授前导空格,之后可以删除尾随空格:

import csv

reader = csv.reader(inputstring.splitlines(), skipinitialspace=True)
row = next(reader)  # get just the first row
res = [c.strip() for c in row]

演示:

>>> import csv
>>> inputstring = '"filename.txt", 1234,8973,"Some Description "'
>>> reader = csv.reader(inputstring.splitlines(), skipinitialspace=True)
>>> row = next(reader)
>>> [c.strip() for c in row]
['filename.txt', '1234', '8973', 'Some Description']

这有一个额外的好处,你可以在值中使用逗号,前提是它们被引用:

>>> with_commas = '"Hello, world!", "One for the money, two for the show"'
>>> reader = csv.reader(with_commas.splitlines(), skipinitialspace=True)
>>> [c.strip() for c in next(reader)]
['Hello, world!', 'One for the money, two for the show']

csv.reader()对象将 iterable 作为第一个参数;我使用str.splitlines() method将(可能多行)字符串转换为列表;如果你的输入字符串总是只有一行,你也可以使用[inputstring]

答案 1 :(得分:1)

>>> [s.strip(' "') for s in input.split(',')]
['filename.txt', '1234', '8973', 'Some Description']

如果保证您的引用部分中没有逗号,则可以这样做。

答案 2 :(得分:1)

您可以使用Python maplambda来实现此目的。

In [9]: input = "\"filename.txt\", 1234,8973,\"Some Description \""
In [11]: input = map(lambda x: x.strip(), input.split(','))
In [14]: input = map(lambda x: x.strip('"'), input)
In [16]: input = map(lambda x: x.strip(), input)
In [17]: input
Out[17]: ['filename.txt', '1234', '8973', 'Some Description']

答案 3 :(得分:0)

你可以这样做

li=input.split(",")

这会抓住你

li=['"filename.txt"', ' 1234', '8973', '"Some Description "']

然后使用ltrim和rtrim相应地查看How to trim whitespace (including tabs)?以获取更多详细信息

答案 4 :(得分:0)

使用re模块。

请尝试以下代码:

import re
filter(lambda x: x != '', re.split(",| |\"", input))

输出将是:

['filename.txt', '1234', '8973', 'Some', 'Description']

答案 5 :(得分:0)

map(str.strip, input.replace('"','').split(','))

答案 6 :(得分:0)

您只需使用eval()功能

即可
input = "\"filename.txt\", 1234,8973,\"Some Description \""
>>> list(eval(input))
['filename.txt', 1234, 8973, 'Some Description ']