找不到文件时提高os.walk

时间:2016-04-11 19:50:35

标签: python

如果在文件中找不到“密钥”,我希望脚本停止运行。 如果我的目录如下所示:

Dir
   ->file.xml
   ->file2.xml
   ->yyy.m
   ->ignoreTXT.txt
   ->ignoreC.c
   ->ignoreANYTHING.anything
   ->Dir2 -> file3.xml, xxx.m, yyy.m

假设我的json文件中有两个键:"Hello""World" 如果在"Hello"file2.xml中找到了密钥xxx.m,则应将其打印出来并继续使用下一个密钥。如果找不到"World",则应该提供Exception

第一个问题是我的脚本会查看其他文件(例如.txt.c等)。我想忽略它们,但我不想使用os.remove因为它会删除文件而我需要它们。还有其他选择吗?因为由于这个原因,我的“引发异常”会给出错误,因为在"Hello"文件中找不到.txt(我不关心)。

第二个问题是即使"Hello"被发现也会给我一个错误,因为它在file.xmlfile3.xmlignoreTXT.txt,{{找不到任何内容1}}等等。

ignoreC.txt

2 个答案:

答案 0 :(得分:0)

您可以非常轻松地过滤掉非.xml文件,如下所示:

/e

这将创建if os.path.isdir(path): for root, dirs, files in os.walk(path): xmlFiles = [file for file in files if file.endswith(".xml")] for key, value in jdata.iteritems(): for name in xmlFiles: ... 的子列表,该子列表仅包含以xml文件扩展名结尾的名称。然后,您可以循环浏览此子列表以进行搜索

答案 1 :(得分:0)

您将else置于错误的缩进中。这将有效:

if os.path.isdir(path):
    for root, dirs, files in os.walk(path):
        for key, value in jdata.iteritems():
            for name in files:
                if not name.endswith('.txt'):
                    continue
                with open(os.path.join(root, name)) as fle:
                    content = fle.read()
                if re.search(Wordboundry(key), content):
                    print "Name", key, "was found in", name, "\n"
                    writeToFile(value, content, name, key)
                else:
                    print "Name", key, "was not found in", name
                    raise Exception(key, "was not found in", root)