我具有使用glob识别要删除的文件的功能。在第一个函数中,递归切换按预期工作。在第二个函数中,递归切换有些用...这是我下面的代码示例。
for item in glob.glob(myfile_path + '/**', recursive=self.recrsv.get()):
if item.endswith(".mesg"):
os.remove(os.path.join(myfile_path, item))
此功能按预期工作。
for junk in glob.glob(myfile_path + '/**' + "/*.*[0-9][0-9][0-9][0-9]", recursive=self.recrsv.get()):
os.remove(os.path.join(myfile_path, junk))
此功能有些起作用。无论recursive
设置为True
还是False
,它仍然进入第一级子目录并删除文件*.*[0-9][0-9][0-9][0-9]
。除非将recursive
设置为True
,否则它不会进入第二级子目录。
注意:在tkinter小部件的“检查”按钮中,将递归设置为名为tk.BooleanVar()
的{{1}}。
谢谢。
答案 0 :(得分:1)
使用recursive=False
,
myfile_path + '/**' + "/*.*[0-9][0-9][0-9][0-9]"
等同于
myfile_path + '/*' + "/*.*[0-9][0-9][0-9][0-9]"
或
myfile_path + '/*/*.*[0-9][0-9][0-9][0-9]"
但是,即使使用recursive=False
,该模式也会明确表示搜索myfile_path
的子目录,而不搜索myfile_path
本身的内容。说要搜索myfile_path
的模式是
myfile_path + '/*.*[0-9][0-9][0-9][0-9]"
(此外,以这种方式构建glob是很危险的,因为myfile_path
可能包含glob元字符。请记住在要从字面上进行匹配的组件上使用glob.escape
,或者选择一种搜索机制,需要转义。)
答案 1 :(得分:1)
https://docs.python.org/3/library/glob.html
“如果递归为true,则模式**将匹配任何文件以及零个或多个目录和子目录。如果后跟os.sep,则仅目录和子目录匹配。”
因此,当递归设置为false时,**
中的<myfile_path>/**/*.*[0-9][0-9][0-9][0-9]
恰好匹配一级子目录。因为我假设/
是os.sep
。
答案 2 :(得分:0)
我已经使用if语句并重复其下的glob解决了我的问题。
for junk in glob.glob(myfile_path + "/*.*[0-9][0-9][0-9][0-9]"):
os.remove(os.path.join(myfile_path, junk))
#The above code will delete the specified junk file within myfile_path.
if self.recrsv.get()==1:
for junk in glob.glob(myfile_path + '/**' + "/*.*[0-9][0-9][0-9][0-9]",
recursive=self.recrsv.get()):
os.remove(os.path.join(myfile_path, junk)
#The above code checks the recursive variable, and if true, will recursively delete the junk files.
如果我不使用if语句,而只是依靠glob自己的递归检查,那么即使recursive=False
,垃圾文件也将从第一级子目录中删除。
我可能可以多整理一些代码,使其更具if-statement-intuitive的功能,但问题已解决。谢谢@Szellem和@ user2357112的努力。