Python - FTP
FTPhay Giao thức truyền tệp là một giao thức mạng nổi tiếng được sử dụng để truyền tệp giữa các máy tính trong mạng. Nó được tạo trên kiến trúc máy chủ khách hàng và có thể được sử dụng cùng với xác thực người dùng. Nó cũng có thể được sử dụng mà không cần xác thực nhưng điều đó sẽ kém an toàn hơn. Kết nối FTP duy trì một thư mục đang làm việc hiện tại và các cờ khác, và mỗi lần truyền yêu cầu một kết nối phụ mà qua đó dữ liệu được truyền. Hầu hết các trình duyệt web phổ biến đều có thể truy xuất các tệp được lưu trữ trên máy chủ FTP.
Các phương thức trong lớp FTP
Trong python, chúng tôi sử dụng mô-đun ftplib trong đó có các phương thức bắt buộc dưới đây để liệt kê các tệp khi chúng tôi sẽ chuyển tệp.
phương pháp | Sự miêu tả |
---|---|
pwd () | Thư mục làm việc hiện tại. |
cwd () | Thay đổi thư mục làm việc hiện tại thành đường dẫn. |
dir ([đường dẫn [, ... [, cb]]) | Hiển thị danh sách thư mục của đường dẫn. Cb gọi lại tùy chọn được chuyển đến retrlines (). |
storlines (cmd, f) | Tải lên tệp văn bản bằng cmd FTP đã cho - ví dụ: tên tệp STOR. |
storbinary (cmd, f [, bs = 8192]) | Tương tự như storlines () nhưng được sử dụng cho các tệp nhị phân. |
xóa (đường dẫn) | Xóa tệp từ xa nằm tại đường dẫn. |
mkd (thư mục) | Tạo thư mục từ xa. |
ngoại lệ ftplib.error_temp | Ngoại lệ được đưa ra khi nhận được mã lỗi biểu thị lỗi tạm thời (mã phản hồi trong phạm vi 400–499) .. |
ngoại lệ ftplib.error_perm | Ngoại lệ được đưa ra khi nhận được mã lỗi biểu thị lỗi vĩnh viễn (mã phản hồi trong phạm vi 500–599) .. |
kết nối (máy chủ [, cổng [, thời gian chờ]]) | Kết nối với máy chủ và cổng đã cho. Số cổng mặc định là 21, như được chỉ định bởi giao thức FTP .. |
bỏ () | Đóng kết nối và thoát. |
Dưới đây là ví dụ của một số phương pháp trên.
Liệt kê các tệp
Ví dụ dưới đây sử dụng đăng nhập ẩn danh vào máy chủ ftp và liệt kê nội dung của thư mục hiện tại. Nó xử lý thông qua tên của các tệp và thư mục và lưu trữ chúng dưới dạng danh sách. Sau đó in chúng ra.
import ftplib
ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")
data = []
ftp.dir(data.append)
ftp.quit()
for line in data:
print "-", line
Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:
- lrwxrwxrwx 1 0 0 1 Nov 13 2012 ftp -> .
- lrwxrwxrwx 1 0 0 3 Nov 13 2012 mirror -> pub
- drwxr-xr-x 23 0 0 4096 Nov 27 2017 pub
- drwxr-sr-x 88 0 450 4096 May 04 19:30 site
- drwxr-xr-x 9 0 0 4096 Jan 23 2014 vol
Thay đổi thư mục
Chương trình dưới đây sử dụng phương thức cwd có sẵn trong mô-đun ftplib để thay đổi thư mục và sau đó tìm nạp nội dung cần thiết.
import ftplib
ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")
data = []
ftp.cwd('/pub/') change directory to /pub/
ftp.dir(data.append)
ftp.quit()
for line in data:
print "-", line
Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:
- lrwxrwxrwx 1 504 450 14 Nov 02 2007 FreeBSD -> os/BSD/FreeBSD
- lrwxrwxrwx 1 504 450 20 Nov 02 2007 ImageMagick -> graphics/ImageMagick
- lrwxrwxrwx 1 504 450 13 Nov 02 2007 NetBSD -> os/BSD/NetBSD
- lrwxrwxrwx 1 504 450 14 Nov 02 2007 OpenBSD -> os/BSD/OpenBSD
- -rw-rw-r-- 1 504 450 932 Jan 04 2015 README.nluug
- -rw-r--r-- 1 504 450 2023 May 03 2005 WhereToFindWhat.txt
- drwxr-sr-x 2 0 450 4096 Jan 26 2008 av
- drwxrwsr-x 2 0 450 4096 Aug 12 2004 comp
Tìm nạp tệp
Sau khi nhận được danh sách các tệp như được hiển thị ở trên, chúng tôi có thể tìm nạp một tệp cụ thể bằng cách sử dụng getfilephương pháp. Phương pháp này di chuyển một bản sao của tệp từ hệ thống từ xa sang hệ thống cục bộ từ nơi bắt đầu kết nối ftp.
import ftplib
import sys
def getFile(ftp, filename):
try:
ftp.retrbinary("RETR " + filename ,open(filename, 'wb').write)
except:
print "Error"
ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")
ftp.cwd('/pub/') change directory to /pub/
getFile(ftp,'README.nluug')
ftp.quit()
Khi chúng tôi chạy chương trình trên, chúng tôi thấy tệp README.nlug hiện diện trong hệ thống cục bộ từ nơi bắt đầu kết nối.