如果在文件中找不到“密钥”,我希望脚本停止运行。 如果我的目录如下所示:
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.xml
或file3.xml
,ignoreTXT.txt
,{{找不到任何内容1}}等等。
ignoreC.txt
答案 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)