2011-11-23 19 views
10

लगता है मैं निम्नलिखित की तरह एक निर्देशिका संरचना है पार्टी की योजना बनाई समान:अजगर समारोह है कि आदेश

[[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 

मैं 01.png करने के लिए सभी * a.png नाम बदलने के लिए, * ख एक अजगर स्क्रिप्ट लिखने के लिए करना चाहते हैं। png से 02.png, और इसी तरह। फ्रिस्ट मुझे लगता है कि मुझे find . -name '*.png' जैसा कुछ उपयोग करना है, और पाइथन में मिली सबसे समान चीज़ os.walk थी। हालांकि, os.walk में मुझे प्रत्येक फ़ाइल को जांचना है, अगर यह पीएनजी है, तो मैं इसे रूट के साथ जोड़ दूंगा, किसी भी तरह से वह सुरुचिपूर्ण नहीं है। मैं सोच रहा था कि ऐसा करने का एक बेहतर तरीका है या नहीं? अग्रिम में धन्यवाद।

उत्तर

8

इस तरह के एक खोज पैटर्न के लिए, आप शायद glob से दूर हो सकते हैं।

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

आप निर्देशिका पेड़ को पार करने के लिए 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)) 
+1

मैं 'if file.endswith ("। Png") का उपयोग करने पर विचार करता हूं: '' rsplit() '(जो वास्तव में आवश्यक है उससे अधिक काम करेगा) के बजाय। –

0

इन दिनों, पाथलिब एक सुविधाजनक विकल्प है।

संबंधित मुद्दे