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 または long に変換することもできますmap()

>>> 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 に答える