2014-04-29 48 views
0

我想將一個文件複製到另一個文件。從this thread接受的答案,我已經做了:使用shutil複製文件時意外的結果

def fcopy(src): 
    dst = os.path.splitext(src)[0] + "a.pot" 
    try: 
     shutil.copy(src, dst) 
    except: 
     print("Error in copying " + src) 
     sys.exit(0) 

,並用它作爲:

print(atoms) 
for q in range(0, len(atoms), 2): 
    print(type(atoms[q])) 
    print(atoms[q], fcopy(atoms[q])) 

這是相當多的檢查下里面的代碼,但我希望不要緊,只要因爲它找到atoms[q]。但我得到的結果是:

['Mn1.pot', 'Mn2.pot'] <= result of print(atoms) 
<class 'str'>   <= result of type(atoms) 
Mn1.pot None    <= result of print(atoms,fcopy(atoms)). 
['Mn3.pot', 'Mn4.pot'] 
<class 'str'> 
Mn3.pot None 
['Mn5.pot', 'Mn6.pot'] 
<class 'str'> 
Mn5.pot None 
['Mn7.pot', 'Mn8.pot'] 
<class 'str'> 
Mn7.pot None 

在哪裏我期待​​給我Mn1.pot Mn1a.pot

我仍然在Python初學者,所以這將是巨大的,如果有人能告訴我什麼錯這裏。

+1

你缺少一個return語句。 – ecatmur

+0

謝謝。 加入'return dst'解決吧 – BaRud

回答

1

您沒有收到錯誤 - 如果您確實看到了Error in copying消息,請打印。

你需要知道的部分是每個Python函數都返回一個值。如果您不告訴Python要返回什麼值,Python將返回None

所以,如果你想在目標文件被返回給調用者,你必須做你自己:

def fcopy(src): 
    dst = os.path.splitext(src)[0] + "a.pot" 
    try: 
     shutil.copy(src, dst) 

     return dst # this line should be added 

    except: 
     print("Error in copying " + src) 
     sys.exit(0) 
+0

做到了,就像我的評論一樣。但是謝謝。 – BaRud

+1

@BaRud:我加了答案有兩個原因:1)每個問題都應該有答案; 2)其他人可能會有同樣的問題,評論也沒有太多解釋。 –