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循环可以输出每一行。