0

我是 python 和正则表达式的新手。我目前正在尝试制作一个程序来读取下面文件的内容并获取部分中的特定参数和 max_speeds。在每个 SECTION:# 下,参数都缩进(TAB)直到下一个 SECTION:#

[SECTION:3]
      paramter = 3
      state = AZ
      car = toyota
      max_speed = 90.000
      any_pets = yes
[SECTION:13]
      paramter = 10
      state = NY
      car = honda
      max_speed = 120.000
      any_pets = yes
[SECTION:85]
      paramter = 31
      state = TX
      car = kia
      max_speed = 30.000
      any_pets = no

这是我的代码:

import re
file = open('file.txt').readlines()
file_str = str(file)

for lines in file_str:
     myreg = re.compile(r'(?<=SECTION:13).+(max_speed\s\=\s\w+)')
     myreg1 = myreg.search(lines)
     print myreg1.group(1)

问题是结果总是错误的……就好像正则表达式总是匹配上一节的结果。

请让我知道我做错了什么以及最好的方法是什么。谢谢!

4

3 回答 3

3

你有很多问题。首先,读取文件中的行,如下所示:

with open('file.txt') as f:
    for line in f:
        # process each line.

您阅读行的方式,您创建一个列表readlines,然后使用 将其设为字符串str,这将为您提供类似 的数据"['line1\n', 'line2\n']"。然后遍历该字符串将依次为您提供每个字符。

但是您可能根本不需要自己阅读文件。内置模块ConfigParser会直接为你解析这些文件,看一下。

于 2012-07-02T02:04:20.183 回答
0

要在使用 ConfigParser 模块时处理部分下的缩进,只需使用以下代码:

from ConfigParser import ConfigParser

class fp():
    def __init__(self, filename):
        self.fileobj = open(filename)

    def readline(self):
        return self.fileobj.readline().lstrip()

f = fp('e:/file.txt')
config = ConfigParser()
config.readfp(f)
print config.get('SECTION:3', 'state')
于 2012-07-02T05:04:44.307 回答
0

你应该试试这样的:(我没有运行并测试代码,让它自己运行)

import re    
pattern = '(?<=SECTION:13).+(max_speed\s\=\s\w+)'
mattches = re.findall(pattern, '\n'.join(open('file.txt').readlines()))
print mattches
于 2012-07-02T02:55:52.527 回答