第二次上传时 Ftplib 上传失败,目录不为空

Ftplib upload failed on second upload, directory not empty

我正在尝试将所有文​​件上传到 ftp 服务器中的 time_name 目录(例如“170905_161330”)。

# -*- 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 功能仅在上传文件夹为空时有效。

我该如何解决这个问题?

通过快速阅读您的代码,我怀疑问题出在 ftp.mkd 中。您已经在 for 循环的第一次迭代中创建了目录。

要在您的本地系统上测试此错误,请打开终端:

  1. 写一个mkdir test命令
  2. 再写一个mkdir test
  3. 您将看到一个错误:File Exist。我认为目录不为空是由服务器中的这个错误生成的。

修改您的代码以将 ftp.mkd 放在 for 循环之前:

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()

再次测试。请记住在测试之前从服务器中删除该目录。