Python从FTP下载文件,文件名以特定字符开头

时间:2018-07-18 18:09:31

标签: python file ftp

我正在尝试编写一个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/")

感谢您的帮助!

2 个答案:

答案 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)

此过程分为三个步骤-

  1. 连接FTP
  2. 从FTP获取所有文件名
  3. 使用要下载的特定字符搜索文件

代码写在下面-

#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)