推荐学习书目
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 · Jul 14, 2020 · 3058 views
    This topic created in 2152 days ago, the information mentioned may be changed or developed.
    先说重点:子目录也可能改名

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

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

    试了几千个文件,应该没太大问题,后续再考虑软硬链问题
    9 replies    2020-07-15 01:31:16 +08:00
    k1z
        1
    k1z  
       Jul 14, 2020   ❤️ 1
    每次更新完一级重新匹配更新?
    zarte
        2
    zarte  
       Jul 14, 2020   ❤️ 1
    从叶子节点开始修改
    byzf
        3
    byzf  
       Jul 14, 2020   ❤️ 1
    遇文件改名, 遇目录递归再改名
    greatbody
        4
    greatbody  
       Jul 14, 2020   ❤️ 1
    可以先将所有待改名的文件改名为 MD5
    然后,根据 MD5 的 map,来改名。
    优点:可以完成名字对调的改名。( a.txt b.txt 互换名字)
    缺点:要改两次
    no1xsyzy
        5
    no1xsyzy  
       Jul 14, 2020   ❤️ 1
    手写 DFS
    每一层先递归改子目录再改自己
    mythmgn
        6
    mythmgn  
       Jul 14, 2020   ❤️ 1
    这不是典型的深度优先吗?
    sc3263
        7
    sc3263  
       Jul 14, 2020   ❤️ 2
    os.walk 函数,topdown 参数设置为 False,就会从下往上遍历。
    然后直接匹配文件 /目录名称,重命名就行了。
    Mutoo
        8
    Mutoo  
       Jul 14, 2020   ❤️ 1
    python 的 os.walk 的 depth-first search,按这个顺序入队,然后出栈,即倒序处理就可以了。你的思路没问题。
    imn1
        9
    imn1  
    OP
       Jul 15, 2020
    @sc3263 #7
    好久没用 os.walk 了,现在基本只用 os.scandir
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3014 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 04:13 · PVG 12:13 · LAX 21:13 · JFK 00:13
    ♥ Do have faith in what you're doing.