【发布时间】:2021-05-13 12:48:54
【问题描述】:
在python(和python!)中迭代文件夹结构非常新 我在这个网站上找到的所有答案似乎对我的情况都非常混乱。希望有人能提供帮助。
我有一个名为“下载”的文件夹。 (第一级) 此文件夹存储在“C:\Users\myusername\Desktop\downloads”
在这个文件夹中,我有以下子文件夹。 (二级) 文件夹路径示例:C:\Users\myusername\Desktop\downloads\2020-03-13
2020-03-13
2020-03-13
2020-03-15...等
在每个第二级文件夹中,我都有另一个级别的文件夹,其中包含 pdf 文件。 因此,如果我选择 2020-03-13,它在下面有许多文件夹:- 3rd level
22105853
22108288
22182889
第三级的示例路径: C:\Users\myusername\Desktop\downloads\2020-03-13\22105853
我要做的就是在下载(第一)级别创建一个新文件夹,并将第三级别的所有文件夹复制到其中。基本消除二级结构。
想要的结果。 C:\Users\myusername\Desktop\r3\downloads\NEWFOLDER\22105853 C:\Users\myusername\Desktop\r3\downloads\NEWFOLDER\22108288 C:\Users\myusername\Desktop\r3\downloads\NEWFOLDER\22182889
我开始编写下面的代码并设法在一个名为“下载”的新文件中重新创建文件结构:但现在卡住了,希望有人能帮助我。
save_dir='C:\\Users\\myusername\\Desktop\\downloads\\'
localpath = os.path.join(save_dir, 'Repository')
if not os.path.exists(localpath):
try:
os.mkdir(localpath, mode=777)
print('MAKE_DIR: ' + localpath)
except OSError:
print("directory error occurred")
for root, dirs, files in os.walk(save_dir):
for dir in dirs:
path = os.path.join(localpath, dir)
if '-' not in path and not os.path.exists(path):
#(Checking for '-' to not create folders at sceond level)
os.mkdir(path, mode=777)
print(path)
【问题讨论】:
-
一些备注:通过您期望在该级别上的字符来识别路径级别是相当容易出错的,因为您不能保证该字符不会出现在其他级别上。它现在可能工作,但它不是面向未来的。另请注意,您使用
dir作为变量,这已经是一个内置名称。这可能会导致奇怪的错误。我建议您使用像 Pycharm 这样的 IDE,并养成修复实时代码检查显示的所有警告的习惯。仅此一项就可以在您工作时提高您的代码质量和 Python 技能。至于解决方案,@SdahlSean 的解决方案似乎是一个很好的起点。 -
是的,我计划通过使用正则表达式或 glob 或 fname 匹配来更新文件夹搜索。这是一个权宜之计。