使用python

时间:2016-11-28 07:57:53

标签: python parsing

我只想检查是否有更好的方法来做这个而不是使用我想出的东西。

问题是我需要解析.py文件,更确切地说,我必须查找包含多个list的特定int名为 id_list 的文件数字。数字可以用多种格式书写。

例如:

id_list = [123456, 789123, 456789]

id_list = [    123456,
               789123,
               456789    ]

id_list = [    123456
               ,789123
               ,456789    ]

我想出的作品很好,但为了完美主义,我想知道是否有更平滑的"这样做的方式。

with open(filepath, 'rb') as input_file:
    parsed_string = ''
    start_flag = False
    start_parsing = False
    for line in input_file:
        if 'id_list' in line:
            id_detected = True
        if id_detected:
            for char in line:
                if char == '[':
                    start_parsing = True
                if start_parsing and char != '\n':
                    parsed_string += char
                if char == ']':
                    id_detected = False
                    start_parsing = False
                    break

完成后我只是过滤parsed_string

new_string = "".join(filter(lambda char: char.isdigit() or char == ',', parsed_string))

这会让我获得包含数字和逗号的字符串:123456,789123,456789

所以要把它包起来,有什么我可以改进的吗?

2 个答案:

答案 0 :(得分:2)

您可以使用正则表达式来解决:

import re

with open(filepath, 'rb') as input_file:
    text = input_file.read()
    match = re.search(r'id_list\s*=\s*\[(.*?)\]', text, flags=re.DOTALL)

    if match is None:
        print "Not found"

    else:
        id_list_str = match.group(1)
        id_list = map(int, id_list_str.split(','))
        print id_list

答案 1 :(得分:0)

只需使用importfrom

即可

如果您不想导入整个python文件,只需导入您需要的元素

示例

from filename.py import id_list