2012-02-06 24 views
10

Python ile yeni başlayan bir kullanıcıyım ve bir .txt dosyasının nasıl ayrıştırılacağını araştırıyorum. Benim txt dosyası gibi hesaplama bilgilerle bir isimlistesi geçerli:Bir metin dosyasındaki anahtar değer çiftlerini ayrıştırma

myfile.txt-

var0 = 16
var1 = 1.12434E10
var2 = -1.923E-3
var3 = 920

Değerler nasıl okunur ve python'da myvar0, myvar1, myvar2, myvar3 içine nasıl yazılır?

cevap

36

yerine ayrı bir yerel değişkenlerde bir sözlükte değerlerini saklamak öneririz:

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

Şimdi myvars["var1"] olarak erişin. Adların tümü geçerli bir python değişken adıysa, aşağıdakileri koyabilirsiniz:

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

ve değerlere, ör. names.var1.

+0

Benim durumumda, şeridin() adında gereksiz olduğunu, ancak var olan yeni satırın bir soruna neden olduğunu söyledi. Yani benim için daha iyi olan şey myvars [name] = float (var.strip()) – snow6oy

+0

idi, dosya cas yorumlarına '# bu bir yorum satırı' dır –

11

deneyin piton standart modül configparser

+1

NOT: Dosya bölüm başlıkları içermez ve OP'ın örnek yaparsa ConfigParser bir 'MissingSectionHeaderError' atar başlık içermiyor. @Lauritz tarafından yapılan özel çözüm, [üstbilgileri olmayan configparser kullanmak için olası geçici çözümlerden] muhtemelen daha basittir (http://stackoverflow.com/questions/22501121/configparser-missingsectionheadererror-when-parsing-rsyncd-config-file-with -glob). – 7yl4r

1

Kev'in önerdiği gibi, configparser modülü gitmenin yoludur. Bazı senaryolarda Ancak

çok basit ve etkili (biraz çirkin, itiraf) ama buna yapmanın yolu myfile.py için myfile.txt adlandırmak ve yapılacak olan bir from myfile import * (eğer yazım hatası var 0 düzeltmek sonra ->var0)

Ancak, bu çok güvensiz, bu nedenle dosya bir dış kaynaktan geliyorsa veya kötü niyetli bir saldırgan tarafından yazılabilirse, verileri gizlemek yerine verileri doğrulayan kullanın. tek bir satırda virgülle ayrılmış birden fazla değer varsa

0

, burada dikkat ayrıştırmak kod:

res = {}                                                

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