2012-02-06 21 views
10

我是一個Python新手,我搜索如何解析.txt文件。 我的.txt文件是計算信息等名稱列表:解析文本文件中的鍵值對

myfile.txt的

var0 = 16
VAR1 = 1.12434E10
VAR2 = -1.923E-3
VAR3 = 920

如何讀取值,並把它們放在myvar0, myvar1, myvar2, myvar3在Python?

回答

36

我建議在字典中存儲的,而不是在單獨的局部變量的值:

myvars = {} 
with open("namelist.txt") as myfile: 
    for line in myfile: 
     name, var = line.partition("=")[::2] 
     myvars[name.strip()] = float(var) 

現在訪問他們爲myvars["var1"]。如果名稱都是有效的python變量名稱,則可以將其放在下面:

names = type("Names", [object], myvars) 

並訪問值,例如, names.var1

+0

在我的情況下,他在名稱上使用strip()是多餘的,但var上的換行符導致了問題。所以對我來說更好的是myvars [name] = float(var.strip()) – snow6oy 2016-01-07 18:24:44

+0

如果文件cas註釋'#this is a comment line' – 2016-11-09 08:21:16

11

嘗試Python標準模塊configparser

+1

注:configparser拋出一個'MissingSectionHeaderError'如果文件不包含章節標題和OP的榜樣呢沒有標題。 @Lauritz的自定義解決方案可能比[使用configparser沒有標頭可能的解決方法]更簡單(http://stackoverflow.com/questions/22501121/configparser-missingsectionheadererror-when-parsing-rsyncd-config-file-with -glob)。 – 7yl4r 2017-03-13 18:48:49

1

正如@kev所示,configparser模塊是最好的選擇。

然而,在某些情況下(有點難看,我承認),但非常簡單而有效的方式做這個是重命名myfile.txtmyfile.py,做一個from myfile import *(在修復錯字var 0 - >var0

但是,這是非常不安全,所以如果該文件來自外部源或可以由惡意攻擊者寫入,請使用某些驗證數據而不是盲目執行它。

0

如果有上一行用逗號分隔值,這裏的代碼來解析出:

res = {}                                                

    pairs = args.split(", ")                                            
    for p in pairs:                                              
     var, val = p.split("=")                                           
     res[var] = val