最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用sftp實(shí)現(xiàn)傳文件夾和文件

 更新時(shí)間:2021年04月21日 10:10:13   作者:白天丶  
這篇文章主要為大家詳細(xì)介紹了Python使用sftp實(shí)現(xiàn)傳文件夾和文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

利用python的sftp實(shí)現(xiàn)文件上傳,可以是文件,也可以是文件夾。

版本Python2.7.13 應(yīng)該不用pip安裝更多的插件,都是自帶的

不多說 上代碼

# -*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import paramiko
import os

_XFER_FILE = 'FILE'
_XFER_DIR  = 'DIR'

class MainWindow(object):
    # 構(gòu)造方法
    def __init__(self, arg):
        # 超類調(diào)用
        super(MainWindow, self).__init__()

        # 賦值參數(shù)[字典]
        # 參數(shù)格式 arg = {'ip':'填ip','user':'用戶名','password':'密碼','port':22}
        self.arg = arg
        # 賦值參數(shù)[FTP]
        self.sftp = None

        # 調(diào)試日志
        print self.arg


    # 啟動程序
    def startup(self):
        # 連接FTP
        if self.sftp != None:
            print u'您已經(jīng)成功連接了'
        tmpstr = u'開始連接...用戶名:'+self.arg['user']+u'  密碼:'+self.arg['password']+' IP:'+self.arg['ip']+u' 端口:'+str(self.arg['port'])
        print tmpstr
        try:
            transport = paramiko.Transport((self.arg['ip'], self.arg['port']))
            transport.connect(username=self.arg['user'], password=self.arg['password'])
            self.sftp = paramiko.SFTPClient.from_transport(transport)
            print (u'連接成功 '+self.arg['ip'])
        except Exception as e:
            print u'連接失?。?+str(e)

    # 關(guān)閉程序
    def shutdown(self):
        # 關(guān)閉FTP
        if self.sftp:
            self.sftp.close() 
            print '### disconnect sftp server: %s!'%self.arg['ip']
            self.sftp = None 

    # 處理上傳
    def upload(self, source, target, replace):
        ### 操作數(shù)據(jù)
        # 來源路徑
        source = source.replace('\\', '/')
        # 目標(biāo)路徑
        target = target.replace('\\', '/')


        ### 驗(yàn)證數(shù)據(jù)
        if not os.path.exists(source):
            print u'來源資源不存在,請檢查:' + source
            return


        ### 格式數(shù)據(jù)
        # 格式化目標(biāo)路徑
        self.__makePath(target)


        ### 處理數(shù)據(jù)
        # 文件媒體數(shù)據(jù)(文件類型, 文件名稱)
        filetype, filename = self.__filetype(source)
        # 判斷文件類型
        if filetype == _XFER_DIR:
            # 1.目錄 
            self.uploadDir(source, target, replace)
        elif filetype == _XFER_FILE:
            # 2.文件 
            self.uploadFile(source, filename, replace)


    # 傳送目錄
    def uploadDir(self, source, target, replace):
        ### 驗(yàn)證數(shù)據(jù)
        # 判斷目錄存在
        if not os.path.isdir(source):   
            print u'這個(gè)函數(shù)是用來傳送本地目錄的'
            return

        ### 處理數(shù)據(jù)
        # 遍歷目錄內(nèi)容,上傳資源
        for file in os.listdir(source):
            # 資源路徑
            filepath = os.path.join(source, file) 

            # 判斷資源文件類型
            if os.path.isfile(filepath): 
                # 1.文件
                self.uploadFile(filepath, file, replace) 
            elif os.path.isdir(filepath):
                # 2.目錄
                try:
                    self.sftp.chdir(file) 
                except:
                    self.sftp.mkdir(file)
                    self.sftp.chdir(file) 
                self.uploadDir(filepath, file, replace)

        ### 重置數(shù)據(jù)
        # 返回上一層目錄
        self.sftp.chdir('..') 

    # 傳送文件
    def uploadFile(self, filepath, filename, replace):
        ### 驗(yàn)證數(shù)據(jù)
        # 驗(yàn)證文件類型
        if not os.path.isfile(filepath):
            print u'這個(gè)函數(shù)是用來傳送單個(gè)文件的'
            return
        # 驗(yàn)證文件存在
        if not os.path.exists(filepath):
            print u'err:本地文件不存在,檢查一下'+filepath
            return
        # 驗(yàn)證FTP已連接
        if self.sftp == None:
            print u'sftp 還未鏈接'
            return


        ### 處理數(shù)據(jù)
        # 判斷文件存在是否覆蓋
        if not replace:
            if filename in self.sftp.listdir():
                print u'[*] 這個(gè)文件已經(jīng)存在了,選擇跳過:' + filepath + ' -> ' + self.sftp.getcwd() + '/' + filename
                return
        # 上傳文件
        try:
            self.sftp.put(filepath, filename)
            print u'[+] 上傳成功:' + filepath + ' -> ' + self.sftp.getcwd() + '/' + filename
        except Exception as e:
            print u'[+] 上傳失敗:' + filepath + ' because ' + str(e)


    # 獲得文件媒體數(shù)據(jù)({文件/目錄, 文件名稱})
    def __filetype(self, source):
        # 判斷文件類型
        if os.path.isfile(source):
            # 1.文件
            index = source.rfind('/')
            return _XFER_FILE, source[index+1:]
        elif os.path.isdir(source):  
            # 2.目錄
            return _XFER_DIR, ''


    # 創(chuàng)建目標(biāo)路徑
    # 說明: 目標(biāo)路徑不存在則依次創(chuàng)建路徑目錄
    def __makePath(self, target):
        # 切換根目錄
        self.sftp.chdir('/')

        # 分割目標(biāo)目錄為目錄單元集合
        data = target.split('/')
        # 進(jìn)入目標(biāo)目錄, 目錄不存在則創(chuàng)建
        for item in data:
            try:
                self.sftp.chdir(item) 
                print u'要上傳的目錄已經(jīng)存在,選擇性進(jìn)入合并:' + item
            except:
                self.sftp.mkdir(item)
                self.sftp.chdir(item) 
                print u'要上傳的目錄不存在,創(chuàng)建目錄:' + item




if __name__ == '__main__':
    # """
    # 先熟悉一下sftp有哪些用法  sftp.listdir(可以傳參可以為空) 返回當(dāng)前目錄下清單列表
    # mkdir 創(chuàng)建目錄對應(yīng)rmdir   sftp.put(本地路徑,遠(yuǎn)程要存的文件名) chdir進(jìn)入子目錄
    # """
    arg = {'ip':'填ip','user':'填用戶名','password':'填密碼','port':22}

    me  = MainWindow(arg)
    me.startup()
    # 要上傳的本地文件夾路徑
    source = r'E:\xampp\backup\mysql\cto'
    # 上傳到哪里 [遠(yuǎn)程目錄]
    target = r'/home/www/cto/wp-superdo/backup/db'
    replace = False

    me.upload(source, target, replace)
    me.shutdown()



def main(source, target, replace=False):
    arg = {'ip':填ip,'user':填用戶名,'password':填密碼,'port':22}

    me  = MainWindow(arg)
    me.startup()

    me.upload(source, target, replace)
    me.shutdown()

因?yàn)镻ython2.7對中文的支持不是很好所以如果出現(xiàn)中文錯(cuò)誤
修改一下 Python27\Lib\site-packages\paramiko\py3compat.py

還有

最后上一下執(zhí)行結(jié)果

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Django 登陸驗(yàn)證碼和中間件的實(shí)現(xiàn)

    Django 登陸驗(yàn)證碼和中間件的實(shí)現(xiàn)

    這篇文章主要介紹了Django 登陸驗(yàn)證碼和中間件的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 對Python中9種生成新對象的方法總結(jié)

    對Python中9種生成新對象的方法總結(jié)

    今天小編就為大家分享一篇對Python中9種生成新對象的方法總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 在Django中使用ElasticSearch

    在Django中使用ElasticSearch

    這篇文章主要介紹了在Django中使用ElasticSearch,Elasticsearch是基于Lucene庫的搜索引擎。它提供了具有HTTP?Web界面和無模式JSON文檔的分布式,多租戶功能的全文本搜索引擎,下面詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2022-01-01
  • Python類裝飾器實(shí)現(xiàn)方法詳解

    Python類裝飾器實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Python類裝飾器實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python類裝飾器的相關(guān)概念、原理、實(shí)現(xiàn)方法與使用技巧,需要的朋友可以參考下
    2018-12-12
  • Python、Javascript中的閉包比較

    Python、Javascript中的閉包比較

    這篇文章主要介紹了Python、Javascript中的閉包比較,本文分別講解了Python和Javascript中的閉包,分對它們的不同做了一個(gè)簡單的比較,需要的朋友可以參考下
    2015-02-02
  • Python熱重載調(diào)試新利器問題解決

    Python熱重載調(diào)試新利器問題解決

    Reloading是一個(gè)Python工具庫,它讓我們可以在每次迭代之前從源代碼中重新加載(或函數(shù))而不丟失任何當(dāng)前已執(zhí)行過程,這篇文章主要介紹了Python熱重載調(diào)試新利器,需要的朋友可以參考下
    2024-06-06
  • 詳解Python編程中對Monkey Patch猴子補(bǔ)丁開發(fā)方式的運(yùn)用

    詳解Python編程中對Monkey Patch猴子補(bǔ)丁開發(fā)方式的運(yùn)用

    Monkey Patch猴子補(bǔ)丁方式是指在不修改程序原本代碼的前提下,通過添加類或模塊等方式在程序運(yùn)行過程中加入代碼,下面就來進(jìn)一步詳解Python編程中對Monkey Patch猴子補(bǔ)丁開發(fā)方式的運(yùn)用
    2016-05-05
  • Python讀取mat文件,并轉(zhuǎn)為csv文件的實(shí)例

    Python讀取mat文件,并轉(zhuǎn)為csv文件的實(shí)例

    今天小編就為大家分享一篇Python讀取mat文件,并轉(zhuǎn)為csv文件的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python實(shí)現(xiàn)Web應(yīng)用國際化i18n的示例詳解

    Python實(shí)現(xiàn)Web應(yīng)用國際化i18n的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何基于Python的gettext模塊,實(shí)現(xiàn)一個(gè)靈活、可擴(kuò)展的多語言支持系統(tǒng),文中的示例代碼講解詳細(xì),有需要的可以參考下
    2025-02-02
  • Pandas?Matplotlib保存圖形時(shí)坐標(biāo)軸標(biāo)簽太長導(dǎo)致顯示不全問題的解決

    Pandas?Matplotlib保存圖形時(shí)坐標(biāo)軸標(biāo)簽太長導(dǎo)致顯示不全問題的解決

    在使用matplotlib作圖的時(shí)候,有的時(shí)候會遇到畫圖時(shí)顯示不全和圖片保存時(shí)不完整的問題,這篇文章主要給大家介紹了關(guān)于Pandas?Matplotlib保存圖形時(shí)坐標(biāo)軸標(biāo)簽太長導(dǎo)致顯示不全問題的解決方法,需要的朋友可以參考下
    2022-06-06

最新評論

屏山县| 通化县| 绥滨县| 垦利县| 固镇县| 和田市| 克什克腾旗| 太湖县| 朝阳区| 金溪县| 彭阳县| 神木县| 林口县| 荆门市| 江口县| 富源县| 平遥县| 香港| 承德市| 乌拉特前旗| 定南县| 南陵县| 扶余县| 乌恰县| 青神县| 揭东县| 德化县| 淮安市| 通化县| 永平县| 红原县| 武宣县| 东海县| 罗城| 花垣县| 安达市| 汉中市| 琼海市| 万荣县| 阆中市| 鄂托克旗|