亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

python實現支持目錄FTP上傳下載文件的方法

2020-01-04 18:07:55
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了python實現支持目錄FTP上傳下載文件的方法,適用于windows及Linux平臺FTP傳輸文件及文件夾,需要的朋友可以參考下

本文實例講述了python實現支持目錄FTP上傳下載文件的方法。分享給大家供大家參考。具體如下:

該程序支持ftp上傳下載文件和目錄、適用于windows和linux平臺。

 

 
  1. #!/usr/bin/env python 
  2. # -*- coding: utf-8 -*- 
  3. import ftplib 
  4. import os 
  5. import sys 
  6. class FTPSync(object): 
  7. conn = ftplib.FTP() 
  8. def __init__(self,host,port=21):  
  9. self.conn.connect(host,port)  
  10. def login(self,username,password): 
  11. self.conn.login(username,password) 
  12. self.conn.set_pasv(False
  13. print self.conn.welcome 
  14. def test(self,ftp_path): 
  15. print ftp_path 
  16. print self._is_ftp_dir(ftp_path) 
  17. #print self.conn.nlst(ftp_path) 
  18. #self.conn.retrlines( 'LIST ./a/b') 
  19. #ftp_parent_path = os.path.dirname(ftp_path) 
  20. #ftp_dir_name = os.path.basename(ftp_path) 
  21. #print ftp_parent_path 
  22. #print ftp_dir_name 
  23. def _is_ftp_file(self,ftp_path): 
  24. try
  25. if ftp_path in self.conn.nlst(os.path.dirname(ftp_path)): 
  26. return True 
  27. else
  28. return False 
  29. except ftplib.error_perm,e: 
  30. return False 
  31. def _ftp_list(self, line): 
  32. list = line.split(' '
  33. if self.ftp_dir_name==list[-1and list[0].startswith('d'): 
  34. self._is_dir = True 
  35. def _is_ftp_dir(self,ftp_path): 
  36. ftp_path = ftp_path.rstrip('/'
  37. ftp_parent_path = os.path.dirname(ftp_path) 
  38. self.ftp_dir_name = os.path.basename(ftp_path) 
  39. self._is_dir = False 
  40. if ftp_path == '.' or ftp_path== './' or ftp_path==''
  41. self._is_dir = True 
  42. else
  43. #this ues callback function ,that will change _is_dir value 
  44. try
  45. self.conn.retrlines('LIST %s' %ftp_parent_path,self._ftp_list) 
  46. except ftplib.error_perm,e: 
  47. return self._is_dir  
  48. return self._is_dir 
  49. def get_file(self,ftp_path,local_path='.'): 
  50. ftp_path = ftp_path.rstrip('/'
  51. if self._is_ftp_file(ftp_path):  
  52. file_name = os.path.basename(ftp_path) 
  53. #如果本地路徑是目錄,下載文件到該目錄 
  54. if os.path.isdir(local_path): 
  55. file_handler = open(os.path.join(local_path,file_name), 'wb' ) 
  56. self.conn.retrbinary("RETR %s" %(ftp_path), file_handler.write)  
  57. file_handler.close() 
  58. #如果本地路徑不是目錄,但上層目錄存在,則按照本地路徑的文件名作為下載的文件名稱 
  59. elif os.path.isdir(os.path.dirname(local_path)): 
  60. file_handler = open(local_path, 'wb' ) 
  61. self.conn.retrbinary("RETR %s" %(ftp_path), file_handler.write)  
  62. file_handler.close() 
  63. #如果本地路徑不是目錄,且上層目錄不存在,則退出 
  64. else
  65. print 'EROOR:The dir:%s is not exist' %os.path.dirname(local_path) 
  66. else
  67. print 'EROOR:The ftp file:%s is not exist' %ftp_path 
  68. def put_file(self,local_path,ftp_path='.'): 
  69. ftp_path = ftp_path.rstrip('/'
  70. if os.path.isfile( local_path ):  
  71. file_handler = open(local_path, "r"
  72. local_file_name = os.path.basename(local_path) 
  73. #如果遠程路徑是個目錄,則上傳文件到這個目錄,文件名不變 
  74. if self._is_ftp_dir(ftp_path): 
  75. self.conn.storbinary('STOR %s'%os.path.join(ftp_path,local_file_name), file_handler) 
  76. #如果遠程路徑的上層是個目錄,則上傳文件,文件名按照給定命名 
  77. elif self._is_ftp_dir(os.path.dirname(ftp_path)):  
  78. print 'STOR %s'%ftp_path  
  79. self.conn.storbinary('STOR %s'%ftp_path, file_handler) 
  80. #如果遠程路徑不是目錄,且上一層的目錄也不存在,則提示給定遠程路徑錯誤 
  81. else:  
  82. print 'EROOR:The ftp path:%s is error' %ftp_path 
  83. file_handler.close() 
  84. else
  85. print 'ERROR:The file:%s is not exist' %local_path 
  86. def get_dir(self,ftp_path,local_path='.',begin=True):  
  87. ftp_path = ftp_path.rstrip('/'
  88. #當ftp目錄存在時下載  
  89. if self._is_ftp_dir(ftp_path): 
  90. #如果下載到本地當前目錄下,并創建目錄 
  91. #下載初始化:如果給定的本地路徑不存在需要創建,同時將ftp的目錄存放在給定的本地目錄下。 
  92. #ftp目錄下文件存放的路徑為local_path=local_path+os.path.basename(ftp_path) 
  93. #例如:將ftp文件夾a下載到本地的a/b目錄下,則ftp的a目錄下的文件將下載到本地的a/b/a目錄下 
  94. if begin: 
  95. if not os.path.isdir(local_path): 
  96. os.makedirs(local_path) 
  97. local_path=os.path.join(local_path,os.path.basename(ftp_path)) 
  98. #如果本地目錄不存在,則創建目錄 
  99. if not os.path.isdir(local_path): 
  100. os.makedirs(local_path) 
  101. #進入ftp目錄,開始遞歸查詢 
  102. self.conn.cwd(ftp_path) 
  103. ftp_files = self.conn.nlst() 
  104. for file in ftp_files: 
  105. local_file = os.path.join(local_path, file) 
  106. #如果file ftp路徑是目錄則遞歸上傳目錄(不需要再進行初始化begin的標志修改為False) 
  107. #如果file ftp路徑是文件則直接上傳文件 
  108. if self._is_ftp_dir(file): 
  109. self.get_dir(file,local_file,False
  110. else
  111. self.get_file(file,local_file) 
  112. #如果當前ftp目錄文件已經遍歷完畢返回上一層目錄 
  113. self.conn.cwd( ".." ) 
  114. return 
  115. else
  116. print 'ERROR:The dir:%s is not exist' %ftp_path 
  117. return 
  118.  
  119. def put_dir(self,local_path,ftp_path='.',begin=True): 
  120. ftp_path = ftp_path.rstrip('/'
  121. #當本地目錄存在時上傳 
  122. if os.path.isdir(local_path):  
  123. #上傳初始化:如果給定的ftp路徑不存在需要創建,同時將本地的目錄存放在給定的ftp目錄下。 
  124. #本地目錄下文件存放的路徑為ftp_path=ftp_path+os.path.basename(local_path) 
  125. #例如:將本地文件夾a上傳到ftp的a/b目錄下,則本地a目錄下的文件將上傳的ftp的a/b/a目錄下 
  126. if begin:  
  127. if not self._is_ftp_dir(ftp_path): 
  128. self.conn.mkd(ftp_path) 
  129. ftp_path=os.path.join(ftp_path,os.path.basename(local_path))  
  130. #如果ftp路徑不是目錄,則創建目錄 
  131. if not self._is_ftp_dir(ftp_path): 
  132. self.conn.mkd(ftp_path) 
  133.  
  134. #進入本地目錄,開始遞歸查詢 
  135. os.chdir(local_path) 
  136. local_files = os.listdir('.'
  137. for file in local_files: 
  138. #如果file本地路徑是目錄則遞歸上傳目錄(不需要再進行初始化begin的標志修改為False) 
  139. #如果file本地路徑是文件則直接上傳文件 
  140. if os.path.isdir(file):  
  141. ftp_path=os.path.join(ftp_path,file) 
  142. self.put_dir(file,ftp_path,False
  143. else
  144. self.put_file(file,ftp_path) 
  145. #如果當前本地目錄文件已經遍歷完畢返回上一層目錄 
  146. os.chdir( ".." ) 
  147. else
  148. print 'ERROR:The dir:%s is not exist' %local_path 
  149. return 
  150. if __name__ == '__main__'
  151. ftp = FTPSync('192.168.1.110'
  152. ftp.login('test','test'
  153. #上傳文件,不重命名 
  154. #ftp.put_file('111.txt','a/b') 
  155. #上傳文件,重命名 
  156. #ftp.put_file('111.txt','a/112.txt') 
  157. #下載文件,不重命名 
  158. #ftp.get_file('/a/111.txt',r'D://') 
  159. #下載文件,重命名 
  160. #ftp.get_file('/a/111.txt',r'D:/112.txt') 
  161. #下載到已經存在的文件夾 
  162. #ftp.get_dir('a/b/c',r'D://a') 
  163. #下載到不存在的文件夾 
  164. #ftp.get_dir('a/b/c',r'D://aa') 
  165. #上傳到已經存在的文件夾 
  166. ftp.put_dir('b','a'
  167. #上傳到不存在的文件夾 
  168. ftp.put_dir('b','aa/B/'

希望本文所述對大家的Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品久久久久久99热软件| 51视频国产精品一区二区| 欧美大片免费观看在线观看网站推荐| 日韩欧美在线看| 色黄久久久久久| 欧美亚洲在线观看| 亚洲福利在线观看| 91在线观看欧美日韩| 4p变态网欧美系列| 91高清免费在线观看| 欧美日韩在线另类| 精品久久香蕉国产线看观看gif| 久久综合色88| 91精品国产91| 色偷偷888欧美精品久久久| 久久久亚洲精品视频| 日韩在线视频免费观看高清中文| 亚洲精品国产美女| 国产精品亚洲第一区| 欧美一级淫片丝袜脚交| 精品久久久久久久大神国产| 久久91亚洲精品中文字幕| 国产精品日韩精品| 九九热最新视频//这里只有精品| 久久成人精品视频| 成人精品一区二区三区| 亚洲自拍欧美色图| 性色av一区二区三区红粉影视| 亚洲在线视频福利| 国产精品成人免费电影| 亚洲成人激情在线观看| 欧美福利在线观看| 亚洲无av在线中文字幕| www.久久草.com| 在线成人中文字幕| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲欧美中文日韩在线| 最近2019中文免费高清视频观看www99| 欧美激情女人20p| 欧美在线一区二区视频| 97久久精品国产| 国外成人在线直播| 欧洲美女免费图片一区| 欧美中文字幕在线| 青青久久av北条麻妃海外网| 亚洲一区美女视频在线观看免费| 亚洲成人精品久久| 精品久久中文字幕| 亚洲成人av在线| 成人精品一区二区三区电影免费| 97婷婷涩涩精品一区| 91在线播放国产| 亚洲色图第一页| 国产不卡精品视男人的天堂| 97国产精品人人爽人人做| 日本久久久久久久久久久| 日韩在线高清视频| 国产婷婷成人久久av免费高清| 91极品视频在线| xxxx欧美18另类的高清| 国产mv免费观看入口亚洲| 国产精品三级网站| 最新国产成人av网站网址麻豆| 国产日产欧美精品| 欧美在线免费视频| 欧美日韩一区二区三区| 清纯唯美亚洲综合| 国产精品久久久久久一区二区| 国产一区二区三区精品久久久| 黑人巨大精品欧美一区二区| 国精产品一区一区三区有限在线| 久久综合五月天| 日韩经典中文字幕在线观看| 色妞久久福利网| 97久久伊人激情网| 影音先锋日韩有码| 久久久久久综合网天天| 欧美性猛交xxxx乱大交蜜桃| 538国产精品视频一区二区| 国产精品永久免费| 成人午夜两性视频| 国产成人精品久久亚洲高清不卡| 亚洲网在线观看| 欧美电影免费观看大全| 欧美电影免费观看大全| 欧美激情精品久久久久久大尺度| 精品久久久久久亚洲精品| 久久久中精品2020中文| 欧美日韩国产va另类| 超碰97人人做人人爱少妇| 成人av在线网址| 国产精品va在线| 久久精品国产2020观看福利| 久久精品久久精品亚洲人| 97久久久免费福利网址| 日韩精品视频在线免费观看| 色偷偷888欧美精品久久久| 亚洲性生活视频在线观看| 亚洲一区二区三区四区在线播放| 成人在线视频网| 狠狠色狠色综合曰曰| 综合136福利视频在线| 久久久久久一区二区三区| 亚洲va欧美va国产综合剧情| 国内精品久久久久久影视8| 美女啪啪无遮挡免费久久网站| 少妇高潮久久久久久潘金莲| 亚洲国产成人精品电影| 亚洲精品视频中文字幕| 国产成人精品国内自产拍免费看| 精品视频在线播放色网色视频| 亚洲欧美制服综合另类| 粗暴蹂躏中文一区二区三区| 久久成人这里只有精品| 国产日韩精品入口| 97视频在线观看免费高清完整版在线观看| 久久天天躁狠狠躁夜夜躁| 国内精品久久久久影院优| 亚洲精品v天堂中文字幕| 欧美在线精品免播放器视频| 亚洲最大福利视频| 亚洲a∨日韩av高清在线观看| 亚洲综合中文字幕在线观看| 国产+成+人+亚洲欧洲| 中文字幕日韩综合av| 欧美大片免费观看| 精品人伦一区二区三区蜜桃免费| 亚洲高清一二三区| 国产精品亚洲视频在线观看| 国产精品电影一区| 日本a级片电影一区二区| 色av中文字幕一区| 国产精品视频公开费视频| 亚洲国产婷婷香蕉久久久久久| 精品国产老师黑色丝袜高跟鞋| 18一19gay欧美视频网站| 91久久久久久久久| 国产精品视频区1| 亚洲色图欧美制服丝袜另类第一页| 精品久久久久久久久久国产| 亚洲小视频在线| 欧美日韩午夜激情| 日韩欧美在线看| 久久成人18免费网站| 亚洲999一在线观看www| 日韩在线免费高清视频| 亚洲欧美另类在线观看| 亚洲久久久久久久久久久| 亚洲成人网在线观看| 欧美日韩免费区域视频在线观看| 亚洲国模精品私拍| 久久久国产精品x99av| 激情成人中文字幕| 日韩免费看的电影电视剧大全| 欧美激情极品视频| 国产视频自拍一区| 国产xxx69麻豆国语对白| 国内精品中文字幕| 91精品成人久久| 日韩精品在线免费| 久久久久亚洲精品成人网小说| 中文字幕亚洲激情| 成人高h视频在线| 91精品国产91久久久|