ftp 上传下载文件

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
33
34
from ftplib import FTP
import time
import os
import shutil port = 21 def (host, port, username, password):
ftp = FTP()
ftp.set_debuglevel(2)
ftp.connect(host, port) # 连接
ftp.login(username, password) # 登录,如果匿名登录则用空串代替即可
return ftp def downloadfile(ftp, remotepath, localpath):
bufsize = 1024 # 设置缓冲块大小
fp = open(localpath, 'wb') # 以写模式在本地打开文件
ftp.retrbinary('RETR ' + remotepath, fp.write, bufsize) # 接收服务器上文件并写入本地文件
ftp.set_debuglevel(0) # 关闭调试
fp.close() # 关闭文件 def uploadfile(ftp, remotepath, localpath):
bufsize = 1024
fp = open(localpath, 'rb')
ftp.storbinary('STOR ' + remotepath, fp, bufsize) # 上传文件
ftp.set_debuglevel(0)
fp.close() if __name__ == '__main__':
ftp = ftpconnect(host, port, username, password)
print(ftp)

paramiko 上传下载 SFTP 文件

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
大专栏  python ftp sftpan class="line">import paramiko
import os hostname = 'xxx'
username = 'xxx'
password = 'xxx'
port = 22 # int
upload_local_dir = 'xxx'
download_local_dir = 'xxx'
remote_dir = 'inbox/' # 注意目录,需要手动添加 /
SFTP_DOWNLOAD_FLAG = False # 用来判断文件是否下载成功 def sftp_callback(transfered, total):
global SFTP_DOWNLOAD_FLAG
if transfered == total:
SFTP_DOWNLOAD_FLAG = True def sftpconnect(host, port, username, password):
try:
sf = paramiko.Transport((host, port))
sf.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(sf)
return sftp
except Exception as e:
print('connect exception: ', e) def sftp_upload(host, port, username, password, local, remote):
sf = paramiko.Transport((host, port))
sf.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(sf)
try:
if os.path.isdir(local):
for f in os.listdir(local):
sftp.put(os.path.join(local, f), os.path.join(remote+f))
else:
sftp.put(local, remote)
except Exception as e:
print('upload exception: ', e)
finally:
if sf is not None:
sf.close() def sftp_download(host, port, username, password, local, remote):
global SFTP_DOWNLOAD_FLAG
sf = paramiko.Transport((host, port))
sf.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(sf)
try:
# 远程目录不要用 os.path.isdir(local) 判断是否是文件夹,除非已经确定
# 因为 inbox/ 的上层目录可能没有权限访问,判断目录总是会返回 False
for f in sftp.listdir(remote):
sftpAttributes = sftp.lstat(os.path.join(remote+f))
fileSize = sftpAttributes.st_size
if fileSize: # 只有文件不为空,才会调用 sftp_callback 函数
sftp.get(os.path.join(remote+f), os.path.join(local, f), sftp_callback)
else: # 空文件无法用 sftp_callback 判断是否下载成功,所以不下载
continue if SFTP_DOWNLOAD_FLAG: # 下载成功,移除远程目录文件
SFTP_DOWNLOAD_FLAG = False
sftp.remove(os.path.join(remote+f))
else: # 如果上传存在问题,移除本地已经上传的文件
os.remove(os.path.join(local, f)) except Exception as e:
print('download exception: ', e)
finally:
if sf is not None:
sf.close() if __name__ == '__main__':
# 测试连接
sftp = sftpconnect(host, port, username, password)
print(sftp)

最新文章

  1. MYSQL性能优化的最佳20+条经验
  2. QuickTest Professionar 快捷键
  3. RSA 加解密算法
  4. Lucene/Solr搜索引擎开发笔记 - 第2章 Solr安装与部署(Tomcat篇)
  5. mov视频转gif
  6. linux 2.6 互斥锁的实现-源码分析
  7. BAT等互联网公司薪资分享
  8. NSIS:实现程序窗口逐渐透明的渐入渐出效果
  9. hibernate动态切换数据源
  10. JavaEE开发使用Maven管理的SpringMVC工程
  11. java编程之泛型
  12. ARIMA模型原理
  13. java多线程中的三种特性
  14. feh: linux终端下看图片的好工具
  15. 如何使用PowerShell批量删除Office 365的用户
  16. 学习ML.NET(3): 导入数据集
  17. 理解Kubernetes(2): 应用的各种访问方式
  18. Linux下离线安装Docker
  19. ZYNQ. LwIP.PHY.KSZ9031RNX
  20. LeNet - Python中的卷积神经网络

热门文章

  1. ubuntu14 编译tensorflow C++ 接口
  2. Linux读取目录文件
  3. restful的简单使用
  4. iOS 加急审核的办法
  5. ruoyi HttpUtils
  6. HDU-6708 Windows Of CCPC(打表,递归)
  7. [LC] 322. Coin Change
  8. 我是如何在四年时间里,从厨师转行为 Serverless 应用开发者
  9. 未来科技城 x 奇点云打造「企业数据大脑」,助力1.3万家企业服务
  10. vue element 关闭当前tab 跳转到上一路由