类似于bash find命令的Python函数
我的dir结构如下所示:类似于bash find命令的Python函数,python,Python,我的dir结构如下所示: [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-00
[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
我想编写一个python脚本,将所有*a.png重命名为01.png,*b.png重命名为02.png,依此类推。首先,我想我必须使用类似于
find的东西-名称“*.png”
,我在python中发现的最相似的东西是os.walk
。然而,在os.walk
中,我必须检查每个文件,如果它是png,那么我将把它与它的根连接起来,不知何故,这并不优雅。我想知道有没有更好的方法?提前感谢。对于这样的搜索模式,您可能会侥幸逃脱
从大卫·M·比兹利那里退房
# genfind.py
#
# A function that generates files that match a given filename pattern
import os
import fnmatch
def gen_find(filepat,top):
for path, dirlist, filelist in os.walk(top):
for name in fnmatch.filter(filelist,filepat):
yield os.path.join(path,name)
# Example use
if __name__ == '__main__':
lognames = gen_find("access-log*","www")
for name in lognames:
print name
您可以使用来遍历目录树。
也许这样行吗
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))
这是一个很方便的选择。
我会考虑使用<代码>文件.EnthsAs(“.pNG”):而不是那个<代码> RSPLIT()/Cux>(这将比实际需要做更多的工作)。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))