2011-12-21 22 views
0

私はPythonに新しく、Linuxシステムから/ sys/devices/system/cpu/cpuX/cpufreq/vdd_levelsを読み込み、それを辞書に入れようとしています。しかし、私はどのように改行、スペース、コロンをすべて取り除くのですか?私は私が考えることができるが、それは常にスパゲッティで終わるあらゆる方法で試してみましたファイルからデータを消去して辞書に入れるにはどうすればよいですか?

1: 11111 
2: 22222 
3: 33333 

返されたデータは、この(最初の番号が一意である)のようなものを見て。以下のような

+1

正確に何を試しましたか? –

+0

あなたの仮名があなたの質問を真剣に受け止める機会にどのように影響するかを再考する必要がありますか? –

+1

はい、私が名前をタイプしたとき、私はとても遠いとは思わなかった。残念ながら、私はそれを次の30日間に変更することはできません。 – Troll

答えて

0

は:

import re 
vdd_level_re = re.compile(r'(\d+)\:\s*(\d+)') 

vdd_levels = {} 
with open('/sys/devices/system/cpu/cpuX/cpufreq/vdd_levels') as vdd_level_file: 
    for vdd_level in vdd_level_file: 
     level = vdd_level_re.match(vdd_level) 
     if level: 
      k,v = level.group(1,2) 
      vdd_levels[k] = v 
     else: 
      print "line did not match expected format" 
      print vdd_level 

これは、文字列として、KとVを保存します。

  vdd_levels[k] = int(v) 
+0

新しいPythonプログラマーとして、私はここから離れているかもしれませんが、私はこのように見えます。残念ながら私が返すのは空の{}です。 – Troll

+0

ビルドされるライブラリはvdd_levelsにあります。 – PaulMcG

+0

それを印刷すると何も得られません。多分、私がファイルから得た出力と私がここに投稿したものとでは異なるものがあるかもしれません。私はそれが何であるかを見ることができません。 – Troll

0

何か:これはどのように

s = '1: 11111\n2: 22222\n3: 33333' 
d = {} 
for e in s.split('\n'): 
    k, v = e.split(': ') 
    d[ k ] = v 
print d 
+2

's.split( '\ n')'はもっと簡単に 's.splitlines()'と書かれています。 – PaulMcG

+0

申し訳ありませんが、私はゴルフのタグを逃したようです。 – gdonald

3

これは、文字列sでデータを受け取り、辞書にそれを置く、d:あなたは整数にするVを変換したい場合は、最後の行を次のように変更します。

s = '1: 11111\n2: 22222\n3: 33333'  
d = dict([line.split(': ') for line in s.splitlines()]) 
関連する問題