2017-09-05 17 views
0

自分のすべてのファイルを自分のftpサーバのtime_nameディレクトリ(170905_161330など)にアップロードしようとしています。最初のファイルが正しくアップロードされている間2番目のアップロードで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サーバーで確認できますが、ええ。 2番目のファイルは存在しません。 ... storlines機能は、アップロードフォルダが空の場合にのみ機能します。

どうすればこの問題を解決できますか?

答えて

0

コードが非常に高速であることから、問題がftp.mkdにあると思われます。 forループの最初の繰り返しですでにディレクトリを作成しています。 、ローカルシステム上でこのエラーをテストし、端末を開くには

File Exist

  1. mkdir testコマンドを書くには、あなたは、エラーが表示されます
  2. 再びmkdir testを書きます。私はディレクトリが空ではないと思うが、このエラーはサーバー上で発生しています。

は、forループ前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() 

と再びそれをテストします。サーバーをテストする前に、サーバーからディレクトリを削除することを忘れないでください。

関連する問題