2011-11-30 8 views
6

में निर्देशिका का नाम बदलने के लिए चाहते हैं मेरे पिछली पोस्ट (डबल पोस्टिंग के लिए खेद है और उत्तरों को स्वीकार नहीं करते हैं)मैं पिछले चरित्र को बदलने लोअरकेस</p> <p>(अगर यह एक पत्र है) मैं की मदद से यह किया है से निर्देशिका का नाम बदलने resursively कैसे रिकर्सिवली एक फ़ाइल संरचना लूप करने के लिए और अजगर

यह कोड फ़ाइलों के लिए काम करता है, लेकिन मैं इसे निर्देशिकाओं के लिए भी अनुकूलित कैसे कर सकता हूं?

import fnmatch 
import os 


def listFiles(dir): 
    rootdir = dir 
    for root, subFolders, files in os.walk(rootdir): 
     for file in files: 
      yield os.path.join(root,file) 
    return 


for f in listFiles(r"N:\Sonstiges\geoserver\IM_Topo\GIS\MAPTILEIMAGES_0\tiles_2"): 
    if f[-5].isalpha(): 
     os.rename(f,f[:-5]+f[-5].lower() + ".JPG") 
     print "Renamed " + "---to---" + f[:-5]+f[-5].lower() + ".JPG" 
+0

पदों के लिए बाहरी टिप्पणियों और हस्ताक्षर जोड़ने से बचने के लिए प्रयास करें। –

+1

एक समस्या जो आप चला सकते हैं वह यह है कि जब आप पेड़ पर चल रहे हों तो निर्देशिका का नाम बदलना चलने का कारण बन सकता है (क्योंकि आप उस निर्देशिका में चलने का प्रयास कर सकते हैं जिसका नाम बदल दिया गया है)। तो आप जो करना चाहते हैं वह उन सभी निर्देशिकाओं की सूची बनाते हैं जिन्हें पुनर्नामित करने की आवश्यकता है, और उन लोगों का नाम बदलने के बाद एक अलग लूप है। – kindall

उत्तर

7

समस्या यह है कि os.walk का डिफ़ॉल्ट शीर्ष पर है। यदि आप टॉपडाउन को घुमाने के दौरान निर्देशिकाओं का नाम बदलने का प्रयास करते हैं, तो परिणाम अप्रत्याशित हैं।

नीचे से ऊपर जाने के लिए os.walk सेट करके देखें:

for root, subFolders, files in os.walk(rootdir,topdown=False): 

संपादित

एक और समस्या आपके पास है listFiles() लौटा रहा है, ठीक है, नहीं फ़ाइलें निर्देशिका।

यह (untested) उप नीचे से रिटर्न निर्देशिका अप:

def listDirs(dir): 
    for root, subFolders, files in os.walk(dir, topdown=False): 
     for folder in subFolders: 
      yield os.path.join(root,folder) 
    return 
+0

टिप के लिए धन्यवाद। मुझे नहीं पता कि मैं केवल निर्देशिकाओं का नाम बदलने के लिए कोड कैसे बदल सकता हूं, न कि फाइलें। मैंने listDirs के साथ सूचीफाइल को प्रतिस्थापित किया है लेकिन यह काम नहीं करता है। चीयर्स, रोब –

+0

'फ़ाइलों' के बजाय 'सबफोल्डर्स 'का प्रयोग करें। 'फाइल' फाइलों की एक सूची है, उप-निर्देशिकाओं की सूची' उपफोल्डर्स 'है। – Robin

+0

ग्रेट --- मदद के लिए धन्यवाद। वह काम किया! –

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