2011-09-19 11 views
6

मैं हाइफ़न के साथ फ़ाइल नाम में सभी रिक्त स्थान को प्रतिस्थापित करने के लिए निर्देशिका में सभी फ़ाइलों का नाम बदलने के लिए एक सरल पायथन स्क्रिप्ट लिख रहा हूं।रिक्त स्थान वाले फ़ाइल नामों का नाम बदलना

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
OSError: [Errno 2] No such file or directory 

ऐसा क्यों हो रहा है पर कोई भी विचार: मैं जिसके बाद os.rename पर क्रैश हो रहा है

import os 

path = os.getcwd() 
filenames = os.listdir(path) 

for filename in filenames: 
    os.rename(os.path.join(path + filename), os.path.join(path + filename.replace(" ", "-"))) 

कंसोल में त्रुटि देता है?

उत्तर

19

मुझे लगता है कि यह सिर्फ इसलिए है क्योंकि आप वाक्य रचना अपने कॉल में गलत है os.path.join पर, जिन आइटमों में आप शामिल हो रहे हैं उन्हें दो अलग-अलग तर्कों के रूप में आपूर्ति की जानी चाहिए, जो अल्पविराम से अलग हो जाते हैं। यह मेरे लिए ठीक काम करता है:

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> path = os.getcwd() 
>>> filenames = os.listdir(path) 
>>> for filename in filenames: 
...  os.rename(os.path.join(path, filename), os.path.join(path, filename.replace(' ', '-'))) 
... 
>>> 
8

आप पहले से ही निर्देशिका जो फ़ाइलें आप नाम बदलना चाहते हैं में हैं, तो आप निरपेक्ष पथ देने के लिए की जरूरत नहीं है:

for filename in filenames: 
    os.rename(filename, filename.replace(" ", "-")) 
+1

+1 वास्तविक त्रुटि है कि आप 'os.path.join' के तर्कों की सूची से गुजर रहे हैं नहीं है - आप के साथ + एक शाब्दिक स्ट्रिंग को श्रेणीबद्ध करने की बजाय एक अल्पविराम गुजर - अलग सूची - लेकिन चूंकि यह अनावश्यक है, बस इसे बाहर निकालें। – tripleee