2017-01-10 4 views
1

Мне нужно найти значение переменной в текстовом файле.Поиск значения в текстовом файле

Мой файл в таком виде:

AccountingStoragePort=8544 
AccountingStorageUser=root 
Name=touktouk Cards=45 Files=2015 State=UNKNOWN 

Как получить, например, значение файлов (таким образом, в 2015 году)

В этом файле есть либо 1 «переменная»/строка или несколько отделенный пробелом. Каждое значение уникально (в моем файле нет двух файлов)

С другой стороны, «Файлы» можно найти в любой строке => в строке 3 или строке 150, например.

Я не могу изменить этот файл, чтобы быть совместимым с ConfigParser.

В моем файле conf есть комментарий, который начинается с «#», я должен исключить эту строку моих исследований.

для исключения строки комментария я попробовать это, но это не работает:

match = re.search(r"(?!#\s*)\bFiles=(\d+)", s) 

Я нашел проблему, если в моем файле у меня есть обратка, ваш код не применять комментарий ограничения, например:

import re 

s = ''' 
AccountingStoragePort=8544            
AccountingStorageUser=root 

#Name=touktouk Cards=45 Files=2015 State=UNKNOWN 
Name=touktouk Cards=45 Files=2017 State=UNKNOWN 
''' 

match = re.search(r'^[^#].*\bFiles=(\d+)', s, flags=re.MULTILINE) 
if match: 
    value = match.group(1) 
    print (value) 

программа возвращения 2015 не 2017

+1

Разбирайте строку строки путем сброса, если вы считаете, что используете новый узел, а затем это простое слово поиска в строке. – MooingRawr

+1

И в чем вопрос? Просто получите ценность? – Dmitry

ответ

1

Вы можете использовать re.search. Если значение числа и переменной происходит 1 раз или меньше, используйте:

import re 

s = '''AccountingStoragePort=8544            
AccountingStorageUser=root              
Name=touktouk Cards=45 Files=2015 State=UNKNOWN''' 

match = re.search(r'\bFiles=(\d+)', s) 
if match: 
    value = match.group(1) 
    print value 
+0

Возможно, используйте 'r '\ bFiles = (\ d +)'', чтобы не получить значение (гипотетического) ключа 'OtherFiles'. –

+0

@RobinKoch, спасибо, я думаю, что вы комментарий имеет смысл. – Dmitry

+0

моя проблема в том, что файл содержит строку комментариев (начало строки с #), могу ли я исключить строку комментариев исследовательской группы? – user7379681

0

Более

import re 
with open(file.txt) as f: 
    kvlist = re.split(r'\s+', f.read()) 

pairs = [kvpair.split('=') for kvpair in kvlist]  
kvdict = {pair[0]:pair[1] for pair in pairs} 

print(kvdict['Files']) 

Это должно дать вам полный словарь для повторного использования на других значений.

Смежные вопросы