我有一个包含数字列表的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']
答案 0 :(得分: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']
答案 1 :(得分: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正在使用正则表达式做什么。一般来说,这将是一种方法,但我真的很喜欢你通过一个简单的分裂来避免它们。
答案 2 :(得分: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") ]
答案 3 :(得分:2)
我最好试试你提供的信息:
>>> data = r"['12576810']\n['1917472404']\n['3104185795']"
>>> import re
>>> re.findall("\d+", data)
['12576810', '1917472404', '3104185795']
如果需要map()
>>> map(int, re.findall("\d+", data))
[12576810, 1917472404, 3104185795L]
>>> map(long, re.findall("\d+", data))
[12576810L, 1917472404L, 3104185795L]
答案 4 :(得分: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']
答案 5 :(得分: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']