2016-02-09 3 views
1

У меня есть текстовый файл в форматеКак разобрать файл в формате ключ = значение

key1=value1 
key2=value2 
key3=value3 

Что бы лучший способ, чтобы прочитать его в так у меня есть доступ к значениям в форме, как myObject.key1 или myObject["key1"]?

+4

Интересно, если [ConfigParser] (https://docs.python.org/3.5/library/configparser.html) было бы полезно здесь ... Я никогда не использовал его сам. – Kevin

+0

О, да. configparser - очень полезный модуль. У вас может быть «key = value» или «key: value». – zondo

+1

configparser может быть полезен, но только в том случае, если вы можете немного переформатировать текстовый файл. Текстовый файл должен выглядеть немного иначе ... В частности, вам нужно определить некоторые разделы ... –

ответ

3

Что-то вроде этого:

myObject = {} 
with open("something.ini") as f: 
    for line in f.readlines(): 
    key, value = line.rstrip("\n").split("=") 
    myObject[key] = value 

Обратите внимание, что, как @Goodies упомянуто ниже, если назначить на ту же клавишу несколько раз, это будет просто принять последнее значение. Тем не менее, тривиально добавить некоторую ошибку:

myObject = {} 
with open("something.ini") as f: 
    for line in f.readlines(): 
    key, value = line.rstrip("\n").split("=") 
    if(not key in myObject): 
     myObject[key] = value 
    else: 
     print "Duplicate assignment of key '%s'" % key 
+0

Почти слишком просто и работает. Имейте в виду, что если у вас есть дубликат, это займет последнее значение. – Goodies

+0

@Goodies: Хорошая точка. Добавит примечание. – Linuxios

1

Я бы использовал словарь, если бы был вами. Попробуйте это, если ваше приложение примет использование словарей.

with open('your_file_name') as f: 
    content = f.readlines() 

myDict = {}  

for line in content: 
    a, b = line.split('=') 
    myDict += {a:int(b)} 
1

Классический один лайнер ...

x = dict((kv.split('=') for kv in (l.strip('\n') for l in open('hello.txt')))) 

Какие результаты в:

{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'} 
0

Вы можете сделать это с помощью регулярных выражений

import re 

with open('/path/to/file', 'r') as f: 
    matches = re.findall(r'^(.+)=(.*)$', f.read(), flags=re.M) 
    d = dict(matches) 

print d['key'] 

Имейте в виду, что если у вас есть дубликаты ключей в вашем файле, Найденный будет тень других.

Если вы хотите быть в состоянии сделать d.key3, вы можете использовать bunch пакет

from bunch import Bunch 

d = Bunch(matches) 
print d.key3 
Смежные вопросы