python连接sftp进行文件操作

python连接sftp进行文件操作

1、sftp部署

1)添加用户

[root@docker ~]#groupadd ftpuser
[root@docker ~]#useradd -g ftpuser -s /sbin/nologin -M ftpuser
[root@docker ~]#passwd ftpuser
[root@docker ~]#cd /home && mkdir ftpuser
[root@docker home]#chown root:ftpuser ftpuser
[root@docker home]#chmod 755 ftpuser
[root@docker home]#mkdir sftpdata && chown ftpuser:ftpuser ./sftpdata

2)修改配置文件

[root@docker ~]#vim /etc/ssh/sshd_config
#修改Subsystem 	sftp 	/usr/libexec/openssh/sftp-server为以下
Subsystem 	sftp	internal-sftp
#增加以下
Match User sftp
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
[root@docker ~]#service sshd reload

2、python连接sftp

import paramiko
transport = paramiko.Transport(("101.202.2.25", 22))  # 获取Transport实例
transport.connect(username="ftpuser", password="123456")#sftp用户
sftp = paramiko.SFTPClient.from_transport(transport)

3、提取zip文件

import paramiko
transport = paramiko.Transport(("101.202.2.25", 22))  # 获取Transport实例
transport.connect(username="ftpuser", password="123456")#sftp用户
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.get(remotepath="1.zip", localpath="C:/Users/10854/PycharmProjects/untitled/1.zip")

4、解压zip文件

import os
import zipfile

def unzip_file(zip_src, dst_dir):
    r = zipfile.is_zipfile(zip_src)
    if r:
        fz = zipfile.ZipFile(zip_src, 'r')
        for file in fz.namelist():
            fz.extract(file, dst_dir)
            os.rename(file,file.encode('cp437').decode('gbk'))
    else:
        print('This is not zip')

unzip_file("1.zip","C:/Users/10854/PycharmProjects/untitled/")

5、删除zip文件

根据部署时的设置 ftpuser用户仅有sftpdata文件夹可以进行数据的读写,其他路径下会报错。以此可以进行服务器数据保护,防止数据因错误操作而丢失。

import paramiko

transport = paramiko.Transport(("10.20.2.25", 22))  # 获取Transport实例
transport.connect(username="ftpuser", password="123456")
sftp = paramiko.SFTPClient.from_transport(transport)
sftp = sftp.remove(path='/home/sftp/sftpdata/1.zip')
transport.close()

6、读取csv文件

import csv

csv_read = csv.reader(open('os_objects_2020-02-12T09_16_14+08_00.csv'))
for row in csv_read:
    print(row)

读取完后,表格中的每一行由列表形式输出,通过for循环可以输出每一行。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值