python,如何下载FTP上的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python,如何下载FTP上的文件相关的知识,希望对你有一定的参考价值。

import ftplib, socket
def connect():
    CONST_HOST = "xxxx.xxxx.xxx"
    CONST_USERNAME = "xxxxx"
    CONST_PWD = "xxxxxxx"
    try:
        ftp = ftplib.FTP(CONST_HOST)
        ftp.login(CONST_USERNAME, CONST_PWD)
        return ftp
    except socket.error, socket.gaierror:
        print("FTP is unavailable,please check the host,username and password!")
        sys.exit(0)

def disconnect(ftp):
    ftp.quit()

def download(ftp, filename):
    #预定义每次写文件的buffer
    CONST_BUFFER_SIZE = 8192
    f = open(filename, "wb").write
    try:
        ftp.retrbinary("RETR %s" % filename, f, CONST_BUFFER_SIZE)
    except ftplib.error_perm:
        return False
    return True

def find(ftp, filename):
    ftp_f_list = ftp.nlst()
    if filename in ftp_f_list:
        return True
    else:
        return False
ftp = connect()
#yourfile为你想要下载的文件
if find(ftp, 'yourfile'):
    download(ftp, 'yourfile')
disconnect(ftp)

参考技术A   通过python下载FTP上的文件夹的实现代码:
  # -*- encoding: utf8 -*-
  import os
  import sys
  import ftplib
  class FTPSync(object):
  def __init__(self):
  self.conn = ftplib.FTP('10.22.33.46', 'user', 'pass')
  self.conn.cwd('/') # 远端FTP目录
  os.chdir('/data/') # 本地下载目录
  def get_dirs_files(self):
  u''' 得到当前目录和文件, 放入dir_res列表 '''
  dir_res = []
  self.conn.dir('.', dir_res.append)
  files = [f.split(None, 8)[-1] for f in dir_res if f.startswith('-')]
  dirs = [f.split(None, 8)[-1] for f in dir_res if f.startswith('d')]
  return (files, dirs)
  def walk(self, next_dir):
  print 'Walking to', next_dir
  self.conn.cwd(next_dir)
  try:
  os.mkdir(next_dir)
  except OSError:
  pass
  os.chdir(next_dir)
  ftp_curr_dir = self.conn.pwd()
  local_curr_dir = os.getcwd()
  files, dirs = self.get_dirs_files()
  print "FILES: ", files
  print "DIRS: ", dirs
  for f in files:
  print next_dir, ':', f
  outf = open(f, 'wb')
  try:
  self.conn.retrbinary('RETR %s' % f, outf.write)
  finally:
  outf.close()
  for d in dirs:
  os.chdir(local_curr_dir)
  self.conn.cwd(ftp_curr_dir)
  self.walk(d)
  def run(self):
  self.walk('.')
  def main():
  f = FTPSync()
  f.run()
  if __name__ == '__main__':
  main()

如何使用Python从FTP服务器中删除文本?

我希望从此页面中提取所有信息:

Text data in FTP

我理解请求lib不适用于ftp,所以我使用了ftplib。

但是,文档似乎只是探索目录中文件的下载。如何在没有“文件类型”的情况下下载此文件

FTP server

提前致谢。

答案

如果要将文本文件内容下载到内存而不使用任何临时文件,请使用retrlines like

contents = ""
def collectLines(s):
    global contents
    contents += s + "
"

ftp.retrlines("RETR " + filename, collectLines)

或使用数组:

lines = []
ftp.retrlines("RETR " + filename, lines.append)

有关二进制文件,请参阅Read a file in buffer from FTP python

以上是关于python,如何下载FTP上的文件的主要内容,如果未能解决你的问题,请参考以下文章

Python和FTP

如何从 ftp 下载文件?

如何使用Python从FTP服务器中删除文本?

如何从python设置文件的最后修改时间?

python 复习——网络编程——网络基础ftp任务(上传下载进度条计算文件大小断点续传搭建框架示例)

在 R 中列出 HTTP/FTP 服务器上的文件