从文本文件中查找关键字并在python2.7中打印该值

时间:2014-11-28 18:23:53

标签: text readfile

我有一个包含以下格式的文本文件:

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 2USB 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']

2 个答案:

答案 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()中的行进行比较之前我必须删除它才能解决问题。