对整个目录树内文件改名思路是怎样的?

2020-07-14 16:34:11 +08:00
 imn1
先说重点:子目录也可能改名

需求:
搜索一个目录树,匹配规则,符合的改名(包括文件名或目录名)
规则匹配的对象是 Name,不是 Fullpath

开始想 scandir 并处理,但想想这样不对,改了目录名影响后续 scan
如果先搜索一遍,然后按 fullpath 排序,倒序,再逐个处理,不确定这个思路对不对?
1950 次点击
所在节点    Python
9 条回复
k1z
2020-07-14 16:53:59 +08:00
每次更新完一级重新匹配更新?
zarte
2020-07-14 17:22:33 +08:00
从叶子节点开始修改
byzf
2020-07-14 17:44:11 +08:00
遇文件改名, 遇目录递归再改名
greatbody
2020-07-14 18:32:43 +08:00
可以先将所有待改名的文件改名为 MD5
然后,根据 MD5 的 map,来改名。
优点:可以完成名字对调的改名。( a.txt b.txt 互换名字)
缺点:要改两次
no1xsyzy
2020-07-14 19:38:27 +08:00
手写 DFS
每一层先递归改子目录再改自己
mythmgn
2020-07-14 19:50:11 +08:00
这不是典型的深度优先吗?
sc3263
2020-07-14 19:50:29 +08:00
os.walk 函数,topdown 参数设置为 False,就会从下往上遍历。
然后直接匹配文件 /目录名称,重命名就行了。
Mutoo
2020-07-14 19:55:39 +08:00
python 的 os.walk 的 depth-first search,按这个顺序入队,然后出栈,即倒序处理就可以了。你的思路没问题。
imn1
2020-07-15 01:31:16 +08:00
@sc3263 #7
好久没用 os.walk 了,现在基本只用 os.scandir

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/689975

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX