如何解决从FTP服务器下载文件,该文件在最近n小时内更新
我的要求是下载最近24小时到达根目录的文件。
下面的代码在子目录中工作(例如ftp.cwd(“ / Landing /”),但在我更改为根目录时触发错误。
filematch='*.csv'
ftp.cwd("/")
for file_data in ftp.mlsd(filematch):
file_name,meta = file_data
last_modified = datetime.strptime(meta.get("modify"),"%Y%m%d%H%M%S")
if (last_modified) >= now- timedelta(hours=0,minutes=1440):
print(last_modified)
local_filename = os.path.join('C:\\Work\\',file_name)
file = open(local_filename,'wb')
with open(local_filename,"wb") as file:
ftp.retrbinary(f"RETR {file_name}",file.write)
如果我将>=
更改为==
,则它可以在根目录中工作(但两种情况在子目录中都很好;问题只在根目录中)
if (last_modified) = now- timedelta(hours=0,minutes=1440):
错误消息:-
文件“ C:\ Program Files \ WindowsApps \ PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0 \ lib \ ftplib.py”,第425行,以self.transfercmd(cmd,rest)作为conn:文件“ C:\ Program Files \ WindowsApps \ PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0 \ lib \ ftplib.py“,行382,在transfercmd中返回self.ntransfercmd(cmd,rest)[0]文件” C:\ Program Files \ WindowsApps \ PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0 \ lib \ ftplib.py”,第348行,位于ntransfercmd resp = self.sendcmd(cmd)文件“ C:\ Program Files \ WindowsApps \ PythonAppware \ Python.3.8_3 .8.1776.0_x64__qbz5n2kfra8p0 \ lib \ ftplib.py“,行275,在sendcmd中返回self.getresp()文件“ C:\ Program Files \ WindowsApps \ PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0 \ lib \ ftplib.py” ,第248行,在getresp中引发error_perm(resp) ftplib.error_perm:550权限被拒绝。
解决方法
此问题已解决。
根本原因:-
1>
filematch='*.csv'
ftp.cwd("/")
for file_data in ftp.mlsd(filematch):
尽管文件类型为csv,以上代码仍将获取所有内容的列表。
注意** LIST()在FTP中不起作用
一旦列表和目录可用,它将尝试使用retrbinanary写入文件,并且仅支持文件,而不是dir
ftp.retrbinary(f"RETR {file_name}",file.write)
因此只需在if语句中再添加一个条件,然后仅选择文件即可。
Condition meta([type])=="file"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。