【发布时间】:2018-05-17 23:32:14
【问题描述】:
问题描述
有一组~4000个python文件,结构如下:
@ScriptInfo(number=3254,
attibute=some_value,
title="crawler for my website",
some_other_key=some_value)
scenario_name = entity.get_script_by_title(title)
目标
目标是从 ScriptInfo 装饰器中获取标题的值(在本例中是“我的网站的爬虫”),但有几个问题:
1) 没有命名包含标题的变量的规则。这就是为什么它可以是 title_name、my_title 等。参见示例:
@ScriptInfo(number=3254,
attibute=some_value,
my_title="crawler for my website",
some_other_key=some_value)
scenario_name = entity.get_script_by_title(my_title)
2) @ScriptInfo 装饰器可能有两个以上的参数,因此从括号之间获取其内容以获取第二个参数的值不是一种选择
我的(非常天真的)解决方案
但保持不变的代码是scenario_name = entity.get_script_by_title(my_title) 行。考虑到这一点,我想出了解决方案:
import re
title_variable_re = r"scenario_name\s?=\s?entity\.get_script_by_title\((.*)\)"
with open("python_file.py") as file:
for line in file:
if re.match(regexp, line):
title_variable = re.match(title_variable_re, line).group(1)
title_re = title_variable + r"\s?=\s\"(.*)\"?"
with open("python_file.py") as file:
for line in file:
if re.match(title_re, line):
title_value = re.match(regexp, line).group(1)
print title_value
这段代码执行以下操作:
1) 遍历(参见第一个with open)脚本文件并获取具有title 值的变量,因为由程序员选择其名称
2)再次遍历脚本文件(见第二个with open),获取title的值
stackoverflow 家族的问题
有没有比遍历脚本文件两次更好更有效的方法来获取标题(my_title's、title_name's 等)的值?
【问题讨论】:
-
首先,您可以在找到匹配项后跳出循环。除非您期望有多个匹配项,否则文件后面的匹配项应该覆盖文件前面的匹配项。
-
每个文件是否有多个
@ScriptInfo ... scenario_name = ...对?如果是这样,它们是否总是有序的(即scenario_name是否总是遵循@ScriptInfo...结构)?最后,除了这两种结构之外,您的文件还有其他内容吗?
标签: python parsing text-parsing