文件名中有空格的Python FTP下载文件

文件名中有空格的Python FTP下载文件,python,ftp,python-2.x,ftplib,Python,Ftp,Python 2.x,Ftplib,上周,我们的测量设备供应商更新了固件。 我在这里总是使用python脚本来下载所有.rd文件 正式地,固件返回的文件名总是像191222_221400.rd 一个完整的文件名 不幸的是,在更新之后,固件将其作为rw group owner oct 9_191222_221400.rd” 此时脚本正在停止编写。然后不删除它 ## Handles to download and delete the .rd file in the project folder def downloadAndDele

上周,我们的测量设备供应商更新了固件。 我在这里总是使用python脚本来下载所有
.rd
文件

正式地,固件返回的文件名总是像
191222_221400.rd
一个完整的文件名

不幸的是,在更新之后,固件将其作为
rw group owner oct 9_191222_221400.rd”

此时脚本正在停止编写。然后不删除它

## Handles to download and delete the .rd file in the project folder
def downloadAndDelet_RD(self):
    time.sleep(5)
    files = []
    #print self.conf.INSipAddress
    ftp = ftplib.FTP(self.conf.INSipAddress)
    ftp.login()
    files =  ftp.nlst()
    for f in files:
        if f.endswith(".rd"):
            #print self.conf.newP + '//'  + self.conf.nativefolderName + '//' +self.gpsSelectedProject+"//"+f
            ftpfile = urllib2.urlopen("ftp://"+self.conf.INSipAddress +"//"+f)
            localfile = open(self.conf.newP + '//'  + self.conf.nativefolderName + '//' +self.gpsSelectedProject+"//"+f, "wb")        
            ftp.retrbinary('RETR %s' % f, localfile.write)
            localfile.close()
            if self.conf.INSDeleteRD == 1:
                ftp.delete(f)
我尝试了各种方法让它接受整个名字,但我被卡住了。而且一事无成

关于如何解决这个问题有什么建议吗?

您没有提供我要求的信息。无论如何,根据我们得到的信息:

您的FTP服务器似乎已损坏,它返回完整的目录列表,包括
NLST
响应中的元数据。这违反了FTP规范。我认为你的代码没有任何问题。您必须通过从
NLST
响应中剥离元数据来解决该错误

f = f.split()[-1]

我一生中从未使用过Python 2x。我开始游戏有点晚了,所以我一直使用Python 3x。下面的脚本在python3x中运行良好

import ftplib
from ftplib import FTP
ftp = FTP()
from datetime import datetime


filenames = []
data = []

ftp = ftplib.FTP('ftp.anything.com', 'u_name', 'ps_wd')  


def get_dirs_ftp(folder=""):
    contents = ftp.nlst(folder)
    folders = []
    for item in contents:
        if "." not in item:
            folders.append(item)
    return folders
def get_all_dirs_ftp(folder=""):
    dirs = []
    new_dirs = []
    new_dirs = get_dirs_ftp(folder)
    while len(new_dirs) > 0:
        for dir in new_dirs:
            dirs.append(dir)

        old_dirs = new_dirs[:]
        new_dirs = []
        for dir in old_dirs:
            for new_dir in get_dirs_ftp(dir):
                new_dirs.append(new_dir)
    dirs.sort()
    return dirs

#allfiles = []
# get parent and child folders in directory
all_dirs = get_all_dirs_ftp()

# create a list to append metadata
dir_list = []

for dir in all_dirs:
    ftp.cwd('/'+dir+'/')
    print(dir)
    dir_list.append(dir)
    ftp.dir(dir_list.append)

    len(dir_list)


# you probably want to dump the results to a file...
outF = open('C:/your_path/filenames.csv', 'w')
for line in dir_list:
  # write line to output file
  outF.write(line)
  outF.write("\n")
outF.close()
print('Done!!')

您正在使用Python2,对吗?是的,正确的Python2代码是否会抛出任何错误?它只是成功运行,但输出文件为空?这就是问题所在,没有错误,只是“挂起”。它开始下载。它的名字在哪里,但没有更多的0KB和名字。你知道它挂在哪里吗?