2017-09-05 65 views
0

我試圖將我所有的文件上傳到我的ftp服務器中的time_name目錄(例如「170905_161330」)。Ftplib上傳第二次上傳失敗,目錄不爲空

# -*- coding:utf-8 -*- 
import ftplib 
import os 
import datetime 

CWD = os.getcwd() 
NOW_STR = str(datetime.datetime.now()) 
LOCAL_STR = "HDD1/AutoBackUp/" + NOW_STR[2:4]+NOW_STR[5:7]+NOW_STR[8:10]+"_"+NOW_STR[11:13]+NOW_STR[14:16]+NOW_STR[17:19]+"/" 

FTP_ADDRESS = 'FTP_ADDRESS' 
FTP_ID = '1' 
FTP_PW = '1' 
ftp = ftplib.FTP(FTP_ADDRESS, FTP_ID, FTP_PW) 

for i in os.listdir(CWD): 
    FILENAME = str(i) 
    print(FILENAME) 
    ftp.mkd(LOCAL_STR) 

    LOCAL_NAME = LOCAL_STR + FILENAME 
    print(str(LOCAL_NAME)) 
    with open(FILENAME, 'rb') as fileOBJ: 
     ftp.storlines('STOR ' + str(LOCAL_NAME), fileOBJ) 
ftp.quit() 

但錯誤

ftplib.error_perm: 550 HDD1/AutoBackUp/170905_160635/: Directory not empty

繼續出現,而第一個文件是正確上傳。之後,它不起作用。

我可以檢查我的第一個文件在FTP服務器,但是。第二個文件不存在。 我猜... storlines函數只適用於上傳文件夾爲空的情況。

我該如何解決這個問題?

回答

0

從您的代碼的非常迅速的閱讀,我懷疑問題在ftp.mkd。您已在for循環的第一次迭代中創建了該目錄。

要在本地系統上測試這個錯誤,打開終端:

  1. mkdir test命令
  2. mkdir test再次
  3. 你會看到一個錯誤:File Exist。我認爲目錄不是空的是從服務器中的這個錯誤中刪除。

修改代碼,把ftp.mkd在之前的循環:

ftp.mkd(LOCAL_STR) 
for i in os.listdir(CWD): 
    FILENAME = str(i) 
    print(FILENAME) 

    LOCAL_NAME = LOCAL_STR + FILENAME 
    print(str(LOCAL_NAME)) 
    with open(FILENAME, 'rb') as fileOBJ: 
     ftp.storlines('STOR ' + str(LOCAL_NAME), fileOBJ) 
ftp.quit() 

,並再次測試。請記住在測試之前從服務器上刪除目錄。