如何在Python中进入多个目录
我每天都会创建几个文件夹。七天后,我会在这些文件夹里放一个沙盒,然后把它们删除。我用时间戳来给这些文件夹命名。下面是我写的一些代码,给你们看看。
today = datetime.date.today() # Today's date Binary
todaystr = datetime.date.today().isoformat() # Todays date as a string
minus_sevent = today - datetime.timedelta(days = 7) # 7 days ago as a string
minus_seven = minus_sevent.isoformat()
old_folders = minus_seven + '*'
def delete_sandbox():
if os.path.exists(old_folders):
os.chdir(old_folders)
mks_drop_sandbox()
os.chdir(rootDir)
for filename in glob.glob(old_folders):
shutil.rmtree(old_folders)
print 'Sandboxes from 7 days ago removed'
if __name__ == '__main__': myObject = delete_sandbox()
这段代码和我之前用来放沙盒和删除一个文件夹的代码很像。不过,可能在这几天里会有多个构建,我想知道怎么进入每个文件夹并完成这些任务。
这些文件夹会根据它们的时间和日期来创建,我有一些变量可以根据日期来删除所有文件夹,而不管具体的时间。
谢谢!
3 个回答
0
我想知道怎么进入每个文件夹。
你是在问如何使用 os.path.join
来创建完整的路径吗?
http://docs.python.org/library/os.path.html#os.path.join
还是在问 os.chdir
来改变当前工作目录呢?
0
你有两个选择:
使用 os.walk
for root, dirs, files in os.walk('your root'):
for dir in dirs:
os.chdir(os.path.join(root, dir))
delete_sandbox()
使用 os.path.walk,然后把 delete_sandbox 改成用作回调函数。
def delete_sandbox(arg, dirname, names):
3
old_folders = minus_seven + '*'
这个写法并不是你想的那样。它会给你一个文件夹的名字,后面真的会有一个*
符号。这样的话,后面用os.path.exists()
检查的时候会返回False
,也就是说这个文件夹并不存在。
你需要做的是遍历这些目录:
for d in os.listdir(os.getcwd()):
if not os.path.isdir(d) or not d.startswith(minus_seven):
continue
# Do what you need to with 'd' here.
或者用列表推导式来写:
minus_seven_dirs = [d for d in os.listdir(os.getcwd())
if os.path.isdir(d) and d.startswith(minus_seven)]
简单来说,你不能把一个列表直接传给os
的函数,期待它们能正确处理。它们是一个一个路径处理的。