上周我们的测量设备供应商更新了固件。 我在这里总是使用 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。 下面的脚本在 Python 3x 中对我来说工作得很好。
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!!')
在尝试使用 ftplib 库访问 FTP 服务器上名称中包含空格的文件夹时,我遇到了问题。该模块抛出错误,指出找不到该文件夹。
为了解决这个问题,我找到了一个简单的解决方案:我没有直接在 ftp.cwd() 命令中传递带有空格的路径,而是将完整路径存储在一个变量中,并将该变量作为参数传递给 cwd() 命令。这解决了问题,我能够正确访问该文件夹。
这是我用来实现该解决方案的代码:
from ftplib import FTP
ftp = FTP('*******')
ftp.login(user='***', passwd='***')
remote_path = '/***/****/**** ****/***/202001'
try:
ftp.cwd(remote_path)
files = ftp.nlst()
print(files)
except Exception as e:
print(f"Error: {e}")
ftp.quit()
print("FTP connection closed.")