V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
imn1
V2EX  ›  Python

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

  •  
  •   imn1 · 2020-07-14 16:34:11 +08:00 · 2139 次点击
    这是一个创建于 1591 天前的主题,其中的信息可能已经有所发展或是发生改变。
    先说重点:子目录也可能改名

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

    开始想 scandir 并处理,但想想这样不对,改了目录名影响后续 scan
    如果先搜索一遍,然后按 fullpath 排序,倒序,再逐个处理,不确定这个思路对不对?
    第 1 条附言  ·  2020-07-15 01:33:42 +08:00
    暂时先用 scandir 弄个 fulllist,然后倒序排,基本文件排在目录前
    这样就先处理文件,再到目录

    试了几千个文件,应该没太大问题,后续再考虑软硬链问题
    9 条回复    2020-07-15 01:31:16 +08:00
    k1z
        1
    k1z  
       2020-07-14 16:53:59 +08:00   ❤️ 1
    每次更新完一级重新匹配更新?
    zarte
        2
    zarte  
       2020-07-14 17:22:33 +08:00   ❤️ 1
    从叶子节点开始修改
    byzf
        3
    byzf  
       2020-07-14 17:44:11 +08:00   ❤️ 1
    遇文件改名, 遇目录递归再改名
    greatbody
        4
    greatbody  
       2020-07-14 18:32:43 +08:00   ❤️ 1
    可以先将所有待改名的文件改名为 MD5
    然后,根据 MD5 的 map,来改名。
    优点:可以完成名字对调的改名。( a.txt b.txt 互换名字)
    缺点:要改两次
    no1xsyzy
        5
    no1xsyzy  
       2020-07-14 19:38:27 +08:00   ❤️ 1
    手写 DFS
    每一层先递归改子目录再改自己
    mythmgn
        6
    mythmgn  
       2020-07-14 19:50:11 +08:00   ❤️ 1
    这不是典型的深度优先吗?
    sc3263
        7
    sc3263  
       2020-07-14 19:50:29 +08:00   ❤️ 2
    os.walk 函数,topdown 参数设置为 False,就会从下往上遍历。
    然后直接匹配文件 /目录名称,重命名就行了。
    Mutoo
        8
    Mutoo  
       2020-07-14 19:55:39 +08:00   ❤️ 1
    python 的 os.walk 的 depth-first search,按这个顺序入队,然后出栈,即倒序处理就可以了。你的思路没问题。
    imn1
        9
    imn1  
    OP
       2020-07-15 01:31:16 +08:00
    @sc3263 #7
    好久没用 os.walk 了,现在基本只用 os.scandir
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2735 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:29 · PVG 08:29 · LAX 16:29 · JFK 19:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.