我有一个包含以下格式的文本文件:
X_0_Gui_Homescreen_Homescreen : (level 0)
X_0_Gui_Homescreen_Messages_Alert_States : ! (level 1)
X_0_Gui_Menu_600_Menu_Status : i (level 1)
X_0_Gui_Menu_650_Menu_Status_Version : Version info (level 2)
X_0_Gui_Menu_610_Menu_Status_System : System info (level 2)
X_0_Gui_Menu_670_Menu_Status_Media : Media A/B info (level 2)
X_0_Gui_Menu_680_Menu_Status_USB : USB info (level 2)
我想从函数中搜索“X_0_Gui_Menu_680_Menu_Status_USB”之类的关键字,如果找到,则获取值level 2
和USB info
我想出了以下代码但由于某种原因它返回一个空字符串
def page_level_and_gui_name(keyword):
global new_dir_name
os.chdir("..")
os.chdir("..")
os.chdir("..")
with open("gui_page_variables_and_names", "r") as page_level_and_gui_name:
level = ""
gui_name = ""
for line in page_level_and_gui_name:
if keyword in line:
level = re.findall(r"\((.*?)\)",line)
gui_name = re.findall(r" \: (.*?) \(",line)
print " > level : " + str(level)
print " > gui-name : " + str(gui_name)
os.chdir("~Gui_analysis")
os.chdir(new_dir_name)
os.chdir("Data_in_each_page")
修改后的代码:
为了确保它不是目录切换的问题,我将包含运行时字符串的文本文件复制到执行发生的文件夹,并使用该文件,但脚本不会进入循环{{1}也是!
if keyword in line:
但这对问题没有任何影响
我不确定代码中的真正问题是什么。为什么打印一个空字符串!
更新:
我今天发现该函数无法将正确的关键字输入global new_dir_name
shutil.copy("file.txt", "~Gui_analysis/"+ new_dir_name + "/Data_in_each_page")
with open("file.txt", "r") as page_level_and_gui_name:
level = ""
gui_name = ""
for line in page_level_and_gui_name:
if keyword in line:
level = re.findall(r"\((.*?)\)",line)
gui_name = re.findall(r" \: (.*?) \(",line)
print " > level : " + str(level)
print " > keyword : " + keyword
print " > gui-name : " + str(gui_name)
,但是当我打印关键字时,我可以在其外部的相同函数中看到正确的关键字,但不能在if函数中看到。
但是,当我硬编码一个示例关键字时,如:
if function
然后它正确打印为
keyword = "X_0_Gui_Homescreen_EI_Set"
我不确定这里究竟是什么问题
但是当我直接在函数中调用它时。这就是我得到的输出
> level : ['level 2']
> keyword : X_0_Gui_Homescreen_EI_Set
> gui-name : ['SET']
答案 0 :(得分:1)
我认为您的问题可能与您正在进行的所有目录切换有关。
很难说不知道你的文件结构。假设你的txt文件在当前目录中......
这是我认为你想要完成的事情的简化版本:
input_file = 'input.txt'
keyword = 'X_0_Gui_Menu_680_Menu_Status_USB'
def page_level_and_gui_name(input_file, keyword):
with open(input_file, 'rb') as f:
for line in f:
if keyword in line:
level = line.split('(')[1].split(')')[0]
gui_name = line.split(':')[1].split('(')[0]
return info,gui_name
我会使用它并负责在其他地方找到该文件。 (所有的os.chdir())
此示例仅查找第一个实例,但可以轻松扩展以查找所有实例并将它们存储在列表或其他内容中。
更新: 以下为我产生了预期的结果:
>>> with open("gui_page_variables_and_names", "r") as page_level_and_gui_name:
... level = ""
... gui_name = ""
... for line in page_level_and_gui_name:
... if keyword in line:
... level = re.findall(r"\((.*?)\)",line)
... gui_name = re.findall(r" \: (.*?) \(",line)
... print " > level : " + str(level)
... print " > gui-name : " + str(gui_name)
...
> level : ['level 2']
> gui-name : ['USB info']
您可以分享用于交叉检查的代码吗?
答案 1 :(得分:0)
我在经过数小时的追踪和错误后找到了解决方案。主要问题是keyword
在与文本文件keyword = keyword.strip()
中的行进行比较之前我必须删除它才能解决问题。