2011-11-23 38 views
10

Tôi có một cấu trúc thư mục như sau:Python chức năng tương tự để bash tìm lệnh

[[email protected]]$ 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 

Tôi muốn viết một kịch bản python để đổi tên tất cả * a.png để 01.png, * b. png đến 02.png, v.v. Tôi nghĩ tôi phải sử dụng một cái gì đó tương tự như find . -name '*.png', và điều tương tự nhất tôi tìm thấy trong python là os.walk. Tuy nhiên, trong os.walk tôi phải kiểm tra tất cả các tập tin, nếu nó png, sau đó tôi sẽ nối nó với gốc của nó, bằng cách nào đó không phải là thanh lịch. Tôi đã tự hỏi nếu có một cách tốt hơn để làm điều này? Cảm ơn trước.

Trả lời

8

Đối với mẫu tìm kiếm như vậy, có thể bạn có thể lấy đi với glob.

from glob import glob 
paths = glob('set01/*/*.png') 
6

Bạn có thể sử dụng os.walk để đi ngang qua cây thư mục. Có thể điều này hoạt động?

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)) 
+1

Tôi sẽ xem xét sử dụng 'if file.endswith (". Png "):' thay vì 'rsplit()' (sẽ thực hiện nhiều công việc hơn là thực sự cần thiết). –

0

Những ngày này, pathlib là một tùy chọn thuận tiện.

Các vấn đề liên quan