2015-05-11 10 views
7

शीर्षक कहता है, मैं एक पाइथन प्रोग्राम चाहता था जो फ़ाइल नाम बदलता है, लेकिन अगर मैं पहले से ही उस गंतव्य नाम के साथ एक फाइल है तो मैं ओवरराइट करना चाहता हूं।पाइथन प्रोग्राम फ़ाइल नामों का नाम बदलने के लिए फ़ाइल नामों का नाम बदलने के लिए

import os, sys 

original = sys.argv[1] 
output = sys.argv[2] 

os.rename(original, output) 

लेकिन मेरा कोड बस मुझे यह त्रुटि दिखाता है जब उस गंतव्य नाम के साथ पहले से ही फ़ाइल है।

os.rename<original, output> 
WindowsError: [Error 183] Cannot create a file when that file already exists 

मुझे क्या तय करना चाहिए?

+0

फ़ाइल निकालें और पुनः प्रयास करें? – jonrsharpe

उत्तर

6

विंडोज os.rename पर मौजूद होने पर गंतव्य फ़ाइल को प्रतिस्थापित नहीं किया जाएगा। आपको पहले इसे हटाना होगा। आपको त्रुटि को पकड़ने और फ़ाइल हटाने के बाद फिर से कोशिश कर सकते हैं:

import os 

original = sys.argv[1] 
output = sys.argv[2] 

try: 
    os.rename(original, output) 
except WindowsError: 
    os.remove(output) 
    os.rename(original, output) 
0

यह त्रुटि केवल, खिड़कियों पर होता है के रूप में आप अजगर दस्तावेज में पा सकते हैं (https://docs.python.org/2/library/os.html#os.rename)

अगर वहाँ पहले से ही एक फ़ाइल या गंतव्य पर फ़ोल्डर है, निम्न कोड के साथ आप की जाँच करनी चाहिए:

import os.path 
os.path.exists(destination) 

यह भी जवाब देखें: https://stackoverflow.com/a/84173/955026

यदि फ़ाइल मौजूद है, तो मूल फ़ाइल का नाम बदलने से पहले इसे हटा दें। बेशक आपको यह जांचना चाहिए कि क्या आप मूल फ़ाइल को नहीं हटा रहे हैं (इसलिए script.py file1 file1 फ़ाइल 1 को नहीं हटाया जाना चाहिए)।

3

आप shutil.move उपयोग कर सकते हैं, यह खिड़कियों पर ऊपर लिख देगा:

from shutil import move 

move(src,dest) 

डेमो:

In [10]: ls  
Directory of C:\Users\padraic\Desktop 

11/05/2015 20:20 <DIR>   . 
11/05/2015 20:20 <DIR>   .. 
11/05/2015 20:20     0 bar.txt 
11/05/2015 20:20     0 foo.txt 
       2 File(s)    0 bytes 
       2 Dir(s) 47,405,617,152 bytes free 

In [11]: shutil.move("bar.txt","foo.txt")  
In [12]: ls 
Directory of C:\Users\padraic\Desktop  
11/05/2015 20:20 <DIR>   . 
11/05/2015 20:20 <DIR>   .. 
11/05/2015 20:20     0 foo.txt 
       1 File(s)    0 bytes 
       2 Dir(s) 47,405,613,056 bytes free 
In [13]: shutil.move("foo.txt","bar.txt") 
In [14]: ls 
Volume in drive C has no label. 
Volume Serial Number is 3C67-52B9 

Directory of C:\Users\padraic\Desktop 

11/05/2015 20:24 <DIR>   . 
11/05/2015 20:24 <DIR>   .. 
11/05/2015 20:20     0 bar.txt 
       1 File(s)    0 bytes 
       2 Dir(s) 47,405,568,000 bytes free 
+0

धन्यवाद लेकिन क्या यह वास्तव में ओवरराइट करता है? ऐसा लगता है कि गंतव्य फ़ाइल होने पर यह केवल अनदेखा करता है .. – user42459

+0

@ user42459, यह गंतव्य फ़ाइल को प्रतिस्थापित करता है, यदि आप एक ही नाम के साथ फ़ाइल ले जाते हैं तो आप देखेंगे –

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