我正在尝试编写一个Python脚本,该脚本将登录到FTP服务器并仅下载文件名以某些字符开头的目录中的文件。我要连接的FTP目录中的文件名都不同,并且都以日期/时间戳结尾,而不是像“ .txt”这样的文件扩展名。 例如:
-rw------- 1 USERNAME USERNAME 1230456 Jul 18 11:02 NOTMYFILE.FILE.201807181102
-rw------- 1 USERNAME USERNAME 1230457 Jul 18 12:02 FILEINEED.FILE.201807181202
-rw------- 1 USERNAME USERNAME 1230458 Jul 18 10:02 FILEINEED.FILE.201807181002
-rw------- 1 USERNAME USERNAME 1230458 Jul 18 09:02 NOTMYFILE.FILE.201807181902
我只需要告诉python下载以“ FILEINEED”开头的文件即可。
我已经搜索过并且无法找到一种下载文件名以'FILEINEED'开头的文件的方式,而忽略了以'NOTMYFILE'开头的文件
以下是我到目前为止在脚本中得到的内容:
from ftplib import FTP
ftp = FTP("ftp.server.url")
ftp.login(user="UserName", passwd="password123")
ftp.retrlines("LIST")
ftp.cwd("/outbox/")
感谢您的帮助!
答案 0 :(得分:0)
您可以获取所有文件名的列表,并按'FILEINEED' in filename
过滤该列表,然后按这些文件的FTP.retrbinary进行过滤:
filesineed = [filename for filename in ftp.nlst() if 'FILEINEED' in filename]
# Iterate through all the filenames and retrieve them one at a time
for filename in filesineed:
local_filename = os.path.join(os.getcwd(), filename)
with open(local_filename, 'wb') as f:
print('downloading {}...'.format(filename))
ftp.retrbinary('RETR %s' % filename, f.write)
会将这些文件保存到本地当前工作目录中。如果要保存到其他位置,请更改local_filename
。
答案 1 :(得分:0)
此过程分为三个步骤-
代码写在下面-
#Open ftp connection
ftp = ftplib.FTP('ftp address', 'Username','Password')
# Get All Files
files = ftp.nlst()
for file in files:
if(file.startswith('abc') and file.endswith('.xyz')):
print("Downloading..." + file)
ftp.retrbinary("RETR " + file ,open("D:/" + file, 'wb').write)
或者我们也可以像这样搜索文件名中的特定字符-
if 'abxy' in file:
print(file)
ftp.retrbinary("RETR " + file ,open("D:/" + file, 'wb').write)