我有一个文件夹结构如下所示
有几个子文件夹的名称重复,我只想当遇到任何重复的子文件夹名称时,它应该以父文件夹名称作为前缀。你知道吗
例如。 DIR2>;SUBDIR1应重命名为DIR2>;DIR2\u SUDIR1,当文件夹重命名为DIR2\u SUDIR1时,此文件夹中的文件也应与其父文件夹具有相同的前缀。 例如,DIR2>;SUBDIR1>;subdirtst2.txt现在应该变成DIR2>;DIR2\u SUDIR1>;DIR2\u subdirtst2.txt
我到现在都做了些什么?
我只是在一个列表中添加了所有的文件夹名,在此之后,我无法想出任何优雅的方法来完成这项任务。你知道吗
import os
list_dir=[]
for root, dirs, files in os.walk(os.getcwd()):
for file in files:
if file.endswith(".txt"):
path_file = os.path.join(root)
print(path_file)
list_dir.append(path_file)
下面的代码片段应该能够实现您的愿望。我写这篇文章的方式清楚地显示了正在做的事情,所以我相信可能会有一些调整,使它更高效或优雅。你知道吗
这里,
cwd
存储到包含DIR1、DIR2和DIR3的dir的路径。第一个循环检查这些“根目录”的所有直接子目录,并通过重复获取它们的交集(&
)来创建一组重复的子目录名。你知道吗然后它运行另一个循环,检查是否要重命名子目录,最后使用
os.rename
函数重命名子目录及其包含的所有文件。你知道吗os.walk()
返回一个三元组,每个步骤都包含目录的路径、目录中的目录和文件。它以自顶向下或自下而上的方式“遍历”树,并且不会在一次迭代中停止。你知道吗因此,使用内置的
next()
方法生成第一个结果(当前目录的结果),然后使用[1]
或[2]
分别获取目录和文件。你知道吗如果不仅要重命名文件,而且要重命名子目录中的所有项,请将
next(os.walk(srcpath))[2]
替换为os.listdir(srcpath)
。此列表包含文件和目录。你知道吗注意:我首先在一个单独的循环中计算重复名称列表的原因是,第一次出现的名称不会保持不变。在同一循环中重命名将丢失第一个循环。你知道吗
相关问题 更多 >
编程相关推荐