Python函数类似于bash find命令

clw*_*wen 11 python

我有一个如下所示的目录结构:

[me@mypc]$ tree .
.
??? set01
?   ??? 01
?   ?   ??? p1-001a.png
?   ?   ??? p1-001b.png
?   ?   ??? p1-001c.png
?   ?   ??? p1-001d.png
?   ?   ??? p1-001e.png
?   ??? 02
?   ?   ??? p2-001a.png
?   ?   ??? p2-001b.png
?   ?   ??? p2-001c.png
?   ?   ??? p2-001d.png
?   ?   ??? p2-001e.png
Run Code Online (Sandbox Code Playgroud)

我想编写一个python脚本来将所有*a.png重命名为01.png,*b.png重命名为02.png,依此类推.我想我必须使用类似的东西find . -name '*.png',而我在python中发现的最相似的东西是os.walk.但是,os.walk我必须检查每个文件,如果它是png,那么我将它与它的根连接起来,不知何故不那么优雅.我想知道是否有更好的方法来做到这一点?提前致谢.

Mic*_*ior 10

对于像这样的搜索模式,你可能会逃脱glob.

from glob import glob
paths = glob('set01/*/*.png')
Run Code Online (Sandbox Code Playgroud)


moo*_*eep 8

您可以使用os.walk遍历目录树.也许这有效吗?

import os

for dpath, dnames, fnames in os.walk("."):
  for i, fname in enumerate([os.path.join(dpath, fname) for fname in fnames]):
    if fname.endswith(".png"):
      #os.rename(fname, os.path.join(dpath, "%04d.png" % i))
      print "mv %s %s" % (fname, os.path.join(dpath, "%04d.png" % i))
Run Code Online (Sandbox Code Playgroud)

  • 我会考虑使用`if file.endswith(".png"):`而不是``rsplit()`(它将完成比实际需要更多的工作). (2认同)