📜  python 传输文件 - Python (1)

📅  最后修改于: 2023-12-03 15:19:07.267000             🧑  作者: Mango

Python 传输文件

在Python中,我们可以使用各种库和模块来实现文件传输。下面是一些主要的选项:

Sockets

使用Python内置的sockets模块,我们可以轻松地创建客户端和服务器,以在网络上传输文件。

创建服务器
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8000))
server_socket.listen(1)

print('Listening on port 8000.')

while True:
    conn, addr = server_socket.accept()
    print('Connection from {0}'.format(addr))
    with open('received_file.txt', 'wb') as f:
        while True:
            data = conn.recv(1024)
            if not data:
                break
            f.write(data)
    conn.close()
    print('File received.')
创建客户端
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 8000))

with open('file_to_send.txt', 'rb') as f:
    while True:
        data = f.read(1024)
        if not data:
            break
        client_socket.sendall(data)

client_socket.close()
print('File sent.')
Paramiko

Paramiko是一个Python库,它提供了SSH协议的客户端和服务器功能。使用Paramiko,我们可以在本地和远程计算机之间传输文件。

创建服务器
import paramiko

ssh_server = paramiko.Transport(('localhost', 22))
ssh_server.add_server_key(paramiko.RSAKey.generate(2048))
ssh_server.start_server()

sftp_server = paramiko.SFTPServer(ssh_server, None)

print('Listening on port 22.')

while True:
    conn, addr = ssh_server.accept()
    sftp_server.serve_client(conn)
创建客户端
import paramiko

ssh_client = paramiko.Transport(('localhost', 22))
ssh_client.start_client()
ssh_client.auth_password('username', 'password')

sftp_client = ssh_client.open_sftp()

sftp_client.put('file_to_send.txt', 'remote_path/to/receive/file.txt')

sftp_client.close()
ssh_client.close()

print('File sent.')
FTP

Python也有内置的FTP模块,用于在本地和远程计算机之间传输文件。下面是一个简单的例子:

创建服务器
from pyftpdlib import servers, handlers

address = ('', 21)
server = servers.FTPServer(address, handlers.FTPHandler)

server.serve_forever()
创建客户端
from ftplib import FTP

ftp = FTP()
ftp.connect('localhost', 21)
ftp.login('username', 'password')

with open('file_to_send.txt', 'rb') as f:
    ftp.storbinary('STOR remote_file_name.txt', f)

ftp.quit()

print('File sent.')

这里只是列举了一些主要的选项,当然还有很多其他的库和模块可以用于文件传输,如SCP、SFTP、TFTP等等。在实际场景中,我们需要根据具体要求来选择合适的方法。