• Python之办公自动化SFTP


    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


    前言

    提示:这里可以添加本文要记录的大概内容:

    公司里B2B是通过WinSCP里SFTP与客户进行数据传输,WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端,本想偷个懒拿同事的WinSCP的SFTP代码给总部传数据,同事给的代码调用WinSCP就是执行不成功,不知道WinSCP是否有新旧版本兼容,还是必须两边的操作系统都需要是Windows环境呢,最后只能硬着头皮查资料重新写了一个。


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、sftp和ftp的区别是什么?

    sftp和ftp的区别在安全通道,使用的协议,链接方式,安全性等方面都有不同.
    1、sftp是一种安全的文件传输协议,一种通过网络传输文件的安全方法。它确保使用私有和安全的数据流来安全地传输数据。
    2、ftp是文件传输协议。ftp 不提供任何安全通道来在主机之间传输文件。在网站上,如果你想把文件和人共享,最便捷的方式莫过于把文件上传到ftp服务器上,其他人通过FTP客户端程序来下载所需要的文件。
    sftp和ftp不同的具体表现:
    ftp不提供任何安全通道来在主机之间传输文件;而sftp协议提供了一个安全通道,用于在网络上的主机之间传输文件。ftp使用TCP / IP协议。而,sftp是SSH协议的一部分,它是一种远程登录信息。ftp使用TCP端口21上的控制连接建立连接。而,sftp是在客户端和服务器之间通过SSH协议(TCP端口22)建立的安全连接来传输文件。ftp密码和数据以纯文本格式发送,大多数情况下是不加密的,安全性不高。而,sftp会在发送之前加密数据,二进制的形式传递,是无法“按原样”阅读的,安全性较高。
    具体请去网上查看

    二、使用步骤

    1.程序结构

    在这里插入图片描述

    2.配置文件

    config.yaml代码如下(示例):

    CONFIG: &config
      # 日志配置文件路径
      LOGGING_CONFIG_PATH: ./Configs/logging.yaml
      # 日志文件存放位置
      LOGGING_PATH: ./logs
      # SFTP
      FTP_HOST: ***.*****.com
      FTP_PORT: 22
      FTP_USER_NAME : XXXXXXXXX
      FTP_PASSWORD : XXXXXXXXX
      HOME_DIR : /
      REMOTE_PATH : /XXX/
      LOCAL_DIR : D:\Web\HR
      LOCAL_DESDIR : D:\Web\HR\TMP
      # 邮件
      SMTP_SERVER : CNMAIL
      SMTP_USER_NAME : XXX@163.com
      SMTP_USER_PWD : XXX
      FROM_MAIL : isadmin@XXX.com
      TO_MAIL : XXX.zhang@XXX.com
      CC_MAIL : XXX.zhang@XXX.com
    
    
    
    
    DEVELOPMENT : &development
      <<: *config # 继承config,没有重新定义的变量,使用config变量值
      DEBUG: True
    
    PRODUCTION : &production
      <<: *config # 继承config,没有重新定义的变量,使用config变量值
      DEBUG: True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    3.读入配置文件

    代码如下(示例):

    def create_app(config_name=None, config_path=None):
        app = Flask(__name__)
        # 读取配置文件
        if not config_path:
            pwd = os.getcwd()
            config_path = os.path.join(pwd, 'Configs/config.yaml')
        if not config_name:
            config_name = 'PRODUCTION'
        conf = read_yaml(config_name, config_path)
        app.config.update(conf)
    
        if not os.path.exists(app.config['LOGGING_PATH']):
            # 日志文件目录
            os.mkdir(app.config['LOGGING_PATH'])
        # 日志设置
        with open(app.config['LOGGING_CONFIG_PATH'], 'r', encoding='utf-8') as f:
            dict_conf = yaml.safe_load(f.read())
        logging.config.dictConfig(dict_conf)  # 载入日志配置
    
        return app
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    4.sftp_client.py

    在这里插入图片描述

    5.email_client.py

    在这里插入图片描述

    6.main.py

    在这里插入图片描述

    代码如下(示例):

    if __name__ == "__main__":
    
        remotePath = "" 
        localPath = ""  
        runSFTP(remotePath, localPath)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    总结

    记录点点滴滴

  • 相关阅读:
    redis的性能管理
    Promise系列学习
    python爬虫入门学习
    你不知道的JavaScript-对象篇
    闭包
    计算机中的加法器和比较器
    抖音排名怎么做的?抖音视频排名规则是什么样的
    创新科技改变城市:智慧城市建设全景展望
    PBI 背景全屏规律呈现水印
    PowerBI依据字段取一列从小到大的第三个值(没三个值取第二个,第二个没有取第一个)
  • 原文地址:https://blog.csdn.net/panda_225400/article/details/126088460