python3:四种常见方式从远程服务器下载文件(paramiko、requests、wget、urllib2)

这篇具有很好参考价值的文章主要介绍了python3:四种常见方式从远程服务器下载文件(paramiko、requests、wget、urllib2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

paramiko

下载一个文件夹时,便可以使用这个方法,paramiko模块提供了ssh及sftp进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要先进行安装

pip install paramiko
import paramiko
import os
from stat import S_ISDIR as isdir


def down_from_remote(sftp_obj, remote_dir_name, local_dir_name):
    """远程下载文件"""
    remote_file = sftp_obj.stat(remote_dir_name)
    if isdir(remote_file.st_mode):
        # 文件夹,不能直接下载,需要继续循环
        check_local_dir(local_dir_name)
        print('开始下载文件夹:' + remote_dir_name)
        for remote_file_name in sftp.listdir(remote_dir_name):
            sub_remote = os.path.join(remote_dir_name, remote_file_name)
            sub_remote = sub_remote.replace('\\', '/')
            sub_local = os.path.join(local_dir_name, remote_file_name)
            sub_local = sub_local.replace('\\', '/')
            down_from_remote(sftp_obj, sub_remote, sub_local)
    else:
        # 文件,直接下载
        print('开始下载文件:' + remote_dir_name)
        sftp.get(remote_dir_name, local_dir_name)


def check_local_dir(local_dir_name):
    """本地文件夹是否存在,不存在则创建"""
    if not os.path.exists(local_dir_name):
        os.makedirs(local_dir_name)


if __name__ == "__main__":
    """程序主入口"""
    # 服务器连接信息
    host_name = '10.xx.xx.xx'
    user_name = 'xx'
    password = '***'
    port = 22
    # 远程文件路径(需要绝对路径)
    remote_dir = '/opt/xxx090731625.html'
    # 本地文件存放路径(绝对路径或者相对路径都可以)
    local_dir = '/opt/xxxx1625.html'

    # 连接远程服务器
    t = paramiko.Transport((host_name, port))
    t.connect(username=user_name, password=password)
    sftp = paramiko.SFTPClient.from_transport(t)
    # 远程文件开始下载
    down_from_remote(sftp, remote_dir, local_dir)
    # 关闭连接
    t.close()


requests

默认会立即下载文件内容并保存到内存中,如果文件很大,会给内存造成压力

import requests
url = 'https://www.python.org/static/img/python-logo@2x.png'
res = requests.get(url)

# 将文件写入pythonimage.png这个文件中,保存在当前程序运行的目录
with open('pythonimage.png', 'wb') as f:
    f.write(res.content)

#写入本地磁盘文件
open('c:/users/LikeGeeks/downloads/PythonImage.png', 'wb').write(res.content)

如果文件很大,会给内存造成压力,设置stream参数为True,这样,只有当我们遍历iter_content时才会进行数据下载

由于文件内容是分块下载的,因此,可以使用进度条来观察下载的进度(使用clint模块来显示下载进度)

import requests
from clint.textui import progress

url = 'https://www.python.org/ftp/python/3.8.1/python-3.8.1-macosx10.9.pkg'
res = requests.get(url, stream=True)
total_length = int(res.headers.get('content-length'))

with open("py.pkg", "wb") as pypkg:
    for chunk in progress.bar(res.iter_content(chunk_size=1024), expected_size=(total_length/1024) + 1, width=100):
        if chunk:
            pypkg.write(chunk)
# 写入本地磁盘文件
open('c:/users/LikeGeeks/downloads/PythonImage.png', 'wb').write(res.content)

wget

下载wget库

pip install wget
import wget
import ssl

# 取消ssl全局验证
ssl._create_default_https_context = ssl._create_unverified_context

url = 'https://www.python.org/static/img/python-logo@2x.png'
wget.download(url, 'pythonlogo.png')

urllib2

import urllib2

url = 'https://www.python.org/static/img/python-logo@2x.png' 
f = urllib2.urlopen(url) 
data = f.read() 
with open("pythonimage.png", "wb") as code:     
    code.write(data)

可以缩写成文章来源地址https://www.toymoban.com/news/detail-604139.html

f = urllib2.urlopen(url) 
with open("pythonimage.png", "wb") as code:
   code.write(f.read())

到了这里,关于python3:四种常见方式从远程服务器下载文件(paramiko、requests、wget、urllib2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 传奇服务器常见的网络攻击方式有哪些?-版本被攻击

    常见的网络攻击方式有哪些?常见的网络攻击方式 :端口扫描,安全漏洞攻击,口令入侵,木马程序,电子邮件攻击,Dos攻击。 1.传奇服务器端口扫描: 通过端口扫描可以知道被扫描计算机开放了哪些服务和端口,以便发现其弱点,可以手动扫描,也可以使用端口扫描软件

    2024年02月04日
    浏览(40)
  • 有哪些方式可以让Mac连接远程服务器?

    Mac 使用Shell(终端) ssh 连接远程 服务器 初次用Mac做远程维护的同学,可能都会在网上找各种Mac上可用的ssh软件,但是大家可能不知道,Mac自带远程连接工具!。 下面介绍两个方法: 一、方法一:直接用命令行连接 第一步:打开Mac的终端 第二步:在终端输入 ssh -p 端口号 服务

    2024年02月06日
    浏览(33)
  • centos服务器系统下安装python3并与自带的python2

    在centos中,自带有python2,因此需要经常安装python3。但是这里有一个坑,就是centos的yum是用python2写的,如果正常编译安装python3,那么yum就会直接挂了。为了方便以后编译安装python3,不用天天去网上找教程仅供参考。 (因平台原因本文中www即为xxx ,com即为zzz,http/ccccc即为c

    2024年02月11日
    浏览(36)
  • pycharm 连接远程服务器的两种方式 ssh Remote

    按服务器信息填写 在mapping栏下设置本地和远程仓库 (如果已经进入某个项目,可以选择Close Project退出至该页面) 按需配置服务器 右下角点击现在的环境名,点击Add New Interpreter -- Add Local Interpreter;选择已有的Conda环境。

    2024年02月07日
    浏览(42)
  • linux+python3.6.8+uwsgi+postgresql+django部署web服务器

    我这是使用华为云服务器

    2024年02月06日
    浏览(35)
  • Mysql四种常见备份表方式,历史表

    1、将表备份到物理机 2、将表备份在库里面(create复制表结构、insert复制表内容) 3、将表备份在库里面(create table as备份) 注:与2步骤备份在库里面不同的是 as 备份表不会备份主键和外键,只备份表数据 4、大家都知道日志文件,具有“只追加写不修改”的属性,历史表和

    2024年02月04日
    浏览(28)
  • ubuntu 使用 rsync 的 SSH 方式同步备份远程WEB服务器

    ubuntu 20.04 自带 rsync ,对于 WEB 服务器这种更新频率不高的情况,直接使用定时同步复制远程服务器的方法,比较直接和简单! $ rsync --version rsync version 3.1.3 protocol version 31 参考: Ubuntu20.04中的rsync命令 本次主要使用 SSH 方式来完成,抄录一下参考文章 远程 ubuntu 2004 server 192.

    2024年02月15日
    浏览(29)
  • 密码学---常见的四种密码攻击方式

    已知部分密文和加密算法,依次采用所有的密钥进行试译。 1、截获的部分密文 2、加密算法 由于掌握的资源少,一般采用穷举攻击。 经不起唯密文攻击的密码一般认为是不安全的。 攻击者能从已知的明文被变换成密文的方式中获得密钥 1、截获的部分密文 2、加密算法 3、已

    2024年02月07日
    浏览(28)
  • 从创建文件开始,使用git clone方式把代码上传到服务器上,并配置好环境(Pycharm远程连接服务器来跑代码第二种方式)

    本文是在这篇[关于git clone http://xxxxxxxxxxx报错的问题]基础上,扩展把代码放到服务器上运行 想知道为什么使用git clone报错的同学可以去瞅瞅 以下工作都是建立在创建好虚拟环境的基础上 创建虚拟环境直接使用 具体文章以前也写过了点我传送 首先要准备一个文件夹,专门用

    2024年02月03日
    浏览(38)
  • Python3通过串口服务器读取设备Modbus数据【modbus_rtu_over_tcp】

    工业采集设备支持ModbusRtu 协议,通讯端口为232串口 或485接口,上位机连接采集终端,不方便走线【串口线 、485总线】,利用现有网络,通过串口服务器进行连接。 实现方案: 1、虚拟串口,上位机通过串口直接采集数据, 缺点:需要安装、开启虚拟串口程序,增加不稳定因

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包