在文本文件中查找值

时间:2017-01-10 16:05:20

标签: python file parsing text

我必须在文本文件中找到变量的值。

我的文件采用以下格式:

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

如何获取例如Files的值(因此2015)

在这个文件中有1个“变量”/行或几个用空格分隔。每个值都是唯一的(我的文件中没有2个文件)

另一方面,“文件”可以在任何行=>中找到例如,在第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年

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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'])

这应该为您提供一个完整的字典,以便在其他值上重复使用。