2012-02-06 2 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

+0

Что произойдет, если файл cas comments # # это строка комментария ' –

11

Try питон стандартный модуль configparser

+1

Примечание: ConfigParser бросает 'MissingSectionHeaderError', если файл не содержит заголовки разделов и пример OP в делает не имеют заголовков. Таможенное решение от @Lauritz, вероятно, проще, чем [возможные обходные пути для использования configparser без заголовков] (http://stackoverflow.com/questions/22501121/configparser-missingsectionheadererror-when-parsing-rsyncd-config-file-with -glob). – 7yl4r

1

Как предлагает @kev, модуль configparser - это путь.

Однако в некоторых случаях (немного некрасиво, я признаю), но очень простой и эффективный способ сделать, это переименовать myfile.txt в myfile.py и сделать from myfile import * (после того, как вы исправить опечатку var 0 ->var0)

Тем не менее, это очень небезопасный, так что если файл принадлежит внешнему источнику или может быть написан злоумышленником, используйте что-то, которое проверяет данные, а не выполняет их вслепую.

0

Если имеется несколько значений, разделенных запятыми в одной строке, вот код, чтобы разобрать, что из:

res = {}                                                

    pairs = args.split(", ")                                            
    for p in pairs:                                              
     var, val = p.split("=")                                           
     res[var] = val                                             
Смежные вопросы