2

我有一个包含数字列表的 str ,我想将其转换为列表。现在我只能在列表的第 0 个条目中获取整个列表,但我希望每个数字都是列表的一个元素。有谁知道在 Python 中执行此操作的简单方法?

for i in in_data.splitlines():
    print i.split('Counter32: ')[1].strip().split()

我的结果不是我想要的

['12576810']\n['1917472404']\n['3104185795']

我的数据

IF-MIB::ifInOctets.1 = Counter32: 12576810
IF-MIB::ifInOctets.2 = Counter32: 1917472404
IF-MIB::ifInOctets.3 = Counter32: 3104185795

我要结果

['12576810','1917472404','3104185795']
4

6 回答 6

8

鉴于您的数据为

>>> data="""IF-MIB::ifInOctets.1 = Counter32: 12576810
IF-MIB::ifInOctets.2 = Counter32: 1917472404
IF-MIB::ifInOctets.3 = Counter32: 3104185795"""

您可以在意图更明确的地方使用正则表达式

>>> import re
>>> [re.findall("\d+$",e)[0] for e in data.splitlines()]
['12576810', '1917472404', '3104185795']

或如@jamylak 所指出的那样

re.findall("\d+$",data,re.MULTILINE)

str.rsplit将在性能上具有优势

>>> [e.rsplit()[-1] for e in data.splitlines()]
['12576810', '1917472404', '3104185795']
于 2012-05-04T13:18:06.250 回答
5

你已经很远了。根据您拥有的代码,试试这个:

result = []
for i in in_data.splitlines():
    result.append(i.split('Counter32: ')[1].strip())
print result

你也可以这样做:

result = [i.split('Counter32: ')[1].strip() for i in in_data.splitlines()]

然后,你也可以去看看@Abhijit 和@KurzedMetal 对正则表达式做了什么。一般来说,这将是要走的路,但我真的很喜欢你如何通过简单的拆分来避免它们。

于 2012-05-04T13:17:01.713 回答
3

我就是这样做的。

data="""IF-MIB::ifInOctets.1 = Counter32: 12576810 ... IF-MIB::ifInOctets.2 = Counter32: 1917472404 ... IF-MIB::ifInOctets.3
= Counter32: 3104185795"""

[ x.split()[-1] for x in data.split("\n") ]
于 2012-05-04T13:20:52.380 回答
2

我最好尝试使用您提供的信息:

>>> data = r"['12576810']\n['1917472404']\n['3104185795']"
>>> import re
>>> re.findall("\d+", data)
['12576810', '1917472404', '3104185795']

如果需要,您甚至可以将其转换为 int 或 longmap()

>>> map(int, re.findall("\d+", data))
[12576810, 1917472404, 3104185795L]
>>> map(long, re.findall("\d+", data))
[12576810L, 1917472404L, 3104185795L]
于 2012-05-04T13:18:07.677 回答
1
with open('in.txt') as f:
 numbers=[y.split()[-1] for y in f]
print(numbers)      

  ['12576810', '1917472404', '3104185795']

或者:

with open('in.txt') as f:
    numbers=[]
    for x in f:
        x=x.split()
        numbers.append(x[-1])
print(numbers)  

['12576810', '1917472404', '3104185795']
于 2012-05-04T13:17:22.120 回答
0
result = [(item[(item.rfind(' ')):]).strip() for item in list_of_data]

使用列表推导的变体。遍历所有数据行,找到空白的最后一个索引,从最后一个找到的空白位置剪切到它的结尾,剥离结果字符串(擦除可能的空白)并将结果放入新列表中。

    data = """F-MIB::ifInOctets.1 = Counter32: 12576810
IF-MIB::ifInOctets.2 = Counter32: 1917472404
IF-MIB::ifInOctets.3 = Counter32: 3104185795"""
    result = [ (item[(item.rfind(' ')):]).strip() for item in data.splitlines()]
    print result

结果:

['12576810', '1917472404', '3104185795']
于 2012-05-04T13:51:31.150 回答