python 利用SFTP 讀取 、備份、刪除txt文件


# -*- coding: utf-8 -*-
import tools
import paramiko
from cStringIO import StringIO
import logging

_logger = logging.getLogger(__name__)


def get_conf_parser():
    """
    讀取SFTP配置參數
    :return:
    """
    config = tools.config

    host = config.get("host", None)
    port = config.get("port", None)
    user = config.get("user", None)
    pwd = config.get("pwd", None)
    download_path = config.get("download_path", None)
    backup_path = config.get("backup_path", None)
    return host, port, user, pwd, download_path, backup_path


def connect_sftp(host, port, username, password):
    """
    連接SFTP
    :param host:
    :param port:
    :param username:
    :param password:
    :return:
    """
    try:
        sf = paramiko.Transport((host, int(port)))
        sf.connect(username=username, password=password)
        sftp = paramiko.SFTPClient.from_transport(sf)
        _logger.info("成功連接SFTP:%s", host)
        return sftp
    except Exception as e:
        _logger.info(e)
        return False


def put_sftp_file(sftp, f1, backup_path):
    """
    上傳數據到備份文件
    :param f1:數據對象
    :param backup_path:
    :return:
    """
    try:
        sftp.putfo(f1, backup_path)
        _logger.info("成功備份SFTP文件:%s", backup_path)
        return True
    except Exception as e:
        _logger.info(e)
        return False


def remove_sftp_file(sftp, download_path):
    """
    刪除已被讀取的數據文件
    :param backup_path:
    :return:
    """
    try:
        sftp.remove(download_path)
        _logger.info("成功刪除SFTP文件:%s", download_path)
        return True
    except Exception as e:
        _logger.info(e)
        return False


def get_filename(sftp, download_path):
    """
    讀取文件目錄下所有文件名
    :return:
    """
    try:
        return sftp.listdir(download_path)
    except Exception as e:
        _logger.info(e)
        return False


def read_sftp_file(sftp, download_file, backup_file):
    f = []
    try:
        f1 = StringIO()
        sftp.getfo(download_file, f1)
        f1.seek(0)
        put_sftp_file(sftp, f1, backup_file)
        f1.seek(0)
        _logger.info("成功讀取SFTP文件: %s", download_file)
        while True:
            line = f1.readline()
            if line:
                f.append(line)
            else:
                break
    except Exception, e:
        _logger.info(e)
    return f

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章