前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python ftp 下载所有文件到本地 脚本

python ftp 下载所有文件到本地 脚本

作者头像
用户5760343
发布2022-05-13 09:51:11
1.6K0
发布2022-05-13 09:51:11
举报
文章被收录于专栏:sktjsktj

!/bin/env python

import os, sys, ftplib from getpass import getpass from mimetypes import guess_type

nonpassive = False # passive FTP on by default in 2.1+ remotesite = 'home.rmi.net' # download from this site remotedir = '.' # and this dir (e.g., public_html) remoteuser = 'lutz' remotepass = getpass('Password for %s on %s: ' % (remoteuser, remotesite)) localdir = (len(sys.argv) > 1 and sys.argv[1]) or '.' cleanall = input('Clean local directory first? ')[:1] in ['y', 'Y']

print('connecting...') connection = ftplib.FTP(remotesite) # connect to FTP site connection.login(remoteuser, remotepass) # login as user/password connection.cwd(remotedir) # cd to directory to copy if nonpassive: # force active mode FTP connection.set_pasv(False) # most servers do passive

if cleanall: for localname in os.listdir(localdir): # try to delete all locals try: # first, to remove old files print('deleting local', localname) # os.listdir omits . and .. os.remove(os.path.join(localdir, localname)) except: print('cannot delete local', localname)

count = 0 # download all remote files remotefiles = connection.nlst() # nlst() gives files list # dir() gives full details for remotename in remotefiles: if remotename in ('.', '..'): continue # some servers include . and .. mimetype, encoding = guess_type(remotename) # e.g., ('text/plain', 'gzip') mimetype = mimetype or '?/?' # may be (None, None) maintype = mimetype.split('/')[0] # .jpg ('image/jpeg', None')

代码语言:javascript
复制
localpath = os.path.join(localdir, remotename)
print('downloading', remotename, 'to', localpath, end=' ')
print('as', maintype, encoding or '')

if maintype == 'text' and encoding == None:
    # use ascii mode xfer and text file 
    # use encoding compatible wth ftplib's
    localfile = open(localpath, 'w', encoding=connection.encoding)
    callback  = lambda line: localfile.write(line + '\n')
    connection.retrlines('RETR ' + remotename, callback)

else:
    # use binary mode xfer and bytes file
    localfile = open(localpath, 'wb')
    connection.retrbinary('RETR ' + remotename, localfile.write)

localfile.close()
count += 1

connection.quit() print('Done:', count, 'files downloaded.')

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • !/bin/env python
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档