2011-12-21 43 views
0

我是python的新手,試圖從Linux系統讀取/ sys/devices/system/cpu/cpuX/cpufreq/vdd_levels,並將其讀入字典。但是,我如何擺脫所有的換行符,空格和冒號?如何清理文件中的數據並將其存入字典中?

返回的數據看起來像這樣(第一個數字是唯一的):

1: 11111 
2: 22222 
3: 33333 

我已經在各方面都試過我能想到的,但它總是在麪條中結束。

+1

你究竟試過了什麼? – 2011-12-21 04:10:42

+0

你應該重新考慮你的筆名會如何影響人們認真對待你的問題的機會? – 2011-12-21 10:31:25

+1

是的,當我輸入名字時,我沒有想太多。不幸的是,我不能在接下來的30天內改變它。 – Troll 2011-12-22 01:24:23

回答

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爲字符串。如果你想轉換v到整數,改變最後一行:

  vdd_levels[k] = int(v) 
+0

作爲一名新的Python程序員,我可能會離開這裏,但我喜歡這樣看起來的樣子。不幸的是,我得到的所有回報都是空的{}。 – Troll 2011-12-22 01:26:43

+0

構建的庫位於vdd_levels中。 – PaulMcG 2011-12-22 02:40:43

+0

打印出來什麼都沒給我。也許我從文件中得到的輸出和我在這裏發佈的內容有所不同。我看不到它是什麼。 – Troll 2011-12-22 03:18:52

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 2011-12-21 05:22:11

+0

對不起,我似乎錯過了高爾夫標籤。 – gdonald 2011-12-21 12:50:57

3

這需要在字符串s您的數據,並把它變成一本字典,d

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