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

时间:2017-09-05 07:18:36

标签: python ftplib

我正在尝试将我的所有文件上传到我的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 /:目录不为空

继续出现,而第一个文件正确上传。在那之后,它不起作用。

我可以在ftp服务器上查看我的第一个文件,但是是的。第二个文件不存在。 我猜... storlines功能仅在上传文件夹为空时才有效。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

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

  1. 编写mkdir test命令
  2. 再次写一个mkdir test
  3. 您会看到错误:File Exist。我认为服务器中的此错误会导致目录不为空。
  4. 修改代码,在{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()
    

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