FTP là viết tắt của Giao thức truyền tệp. Đó là cách để kết nối hai máy tính và truyền tệp an toàn giữa chúng. Hầu hết các doanh nghiệp sử dụng máy chủ FTP để chia sẻ và lưu trữ dữ liệu được chia sẻ một cách an toàn
Máy chủ FTP nhằm tạo điều kiện thuận lợi cho việc truyền tệp qua internet. Nếu bạn gửi tệp bằng FTP, tệp sẽ được tải lên hoặc tải xuống máy chủ FTP. Khi bạn tải tệp lên, tệp sẽ được chuyển từ máy tính cá nhân sang máy chủ. Khi bạn đang tải xuống tệp, tệp sẽ được chuyển từ máy chủ sang máy tính cá nhân của bạn
Một trong những tính năng chính của máy chủ FTP là khả năng lưu trữ và truy xuất tệp. Trong hướng dẫn này, bạn sẽ tìm hiểu cách tải xuống và tải tệp lên máy chủ FTP bằng Python
Chúng tôi sẽ sử dụng mô-đun ftplib tích hợp sẵn của Python, chúng tôi sẽ sử dụng máy chủ FTP thử nghiệm cho hướng dẫn này, nó được gọi là DLPTEST, dưới đây là các chi tiết chúng tôi cần thêm để kết nối với máy chủ này
nhập ftplib
FTP_HOST = “ftp. dlptest. com”
FTP_USER = “dlpuser@dlptest. com”
FTP_PASS = “SzMf7rTE4pCrf9dV286GuNe4N”
Mật khẩu có thể thay đổi theo thời gian, đảm bảo bạn truy cập trang web của họ để biết thông tin đăng nhập chính xác, kết nối với máy chủ này
# kết nối với máy chủ FTP
ftp = ftplib. FTP[FTP_HOST, FTP_USER, FTP_PASS]
# buộc mã hóa UTF-8
ftp. mã hóa = “utf-8”
Đang tải tệp lên
Để tải lên một tệp, chúng tôi sẽ cần sử dụng ftp. phương thức storbinary[], như hình bên dưới
# local file name you want to upload
filename = "music.csv"
with open[filename, "rb"] as file:
# use FTP's STOR command to upload the file
ftp.storbinary["STOR music.csv", file]
Chúng tôi đã mở tệp bằng chế độ “rb”, có nghĩa là chúng tôi đang đọc tệp cục bộ ở chế độ nhị phân
Sau đó, chúng tôi sử dụng lệnh STOR của FTP, lưu trữ tệp ở chế độ nhị phân, nó sẽ chuyển tệp đó trên một cổng mới. Lưu ý rằng tệp phải tồn tại trong thư mục làm việc cục bộ của bạn, nếu không tệp này sẽ không hoạt động
Máy chủ thử nghiệm này sẽ xóa tệp sau 30 phút, để đảm bảo tệp được tải lên thành công, chúng tôi cần liệt kê tất cả các tệp và thư mục bằng ftp. phương thức dir[]
# list current files & directories
ftp.dir[]
đầu ra
Tải tập tin
Bây giờ, hãy thử tải xuống lại cùng một tệp đó
# the name of file you want to download from the FTP server
filename = 'music.csv'
with open[filename, "wb"] as file:
# use FTP's RETR command to download the file
ftp.retrbinary["RETR music.csv", file.write]
Lần này, chúng tôi đang mở tệp cục bộ ở chế độ “wb”, vì chúng tôi sẽ ghi tệp từ máy chủ vào máy cục bộ
Chúng tôi đang sử dụng lệnh RETR để tải xuống một bản sao của tệp trên máy chủ, chúng tôi cung cấp tên tệp mà chúng tôi muốn tải xuống làm đối số đầu tiên cho lệnh và máy chủ sẽ gửi một bản sao của tệp cho chúng tôi
ftp. phương thức retrbinary[] lấy phương thức gọi khi lưu trữ tệp trên máy cục bộ làm đối số thứ hai
Bạn có thể sử dụng tập lệnh Python này để tải xuống/sao chép toàn bộ thư mục FTP theo cách đệ quy từ Máy chủ FTP từ xa. Giả sử bạn muốn tải xuống thư mục dữ liệu www và tất cả các thư mục con bên trong thư mục này từ ftp. kiểm tra. máy chủ com
#!/usr/bin/python import sys import ftplib import os import time server = "FTPHOST" user = "anonymous" password = "anonymous" source = "/Folder/SourceFolder/" destination = "/home/user/downloads/" interval = 0.05 ftp = ftplib.FTP[server] ftp.login[user, password] def downloadFiles[path, destination]: try: ftp.cwd[path] os.chdir[destination] mkdir_p[destination[0:len[destination]-1] + path] print "Created: " + destination[0:len[destination]-1] + path except OSError: pass except ftplib.error_perm: print "Error: could not change to " + path sys.exit["Ending Application"] filelist=ftp.nlst[] for file in filelist: time.sleep[interval] try: ftp.cwd[path + file + "/"] downloadFiles[path + file + "/", destination] except ftplib.error_perm: os.chdir[destination[0:len[destination]-1] + path] try: ftp.retrbinary["RETR " + file, open[os.path.join[destination + path, file],"wb"].write] print "Downloaded: " + file except: print "Error: File could not be downloaded " + file return def mkdir_p[path]: try: os.makedirs[path] except OSError as exc: if exc.errno == errno.EEXIST and os.path.isdir[path]: pass else: raise downloadFiles[source, destination]
Bài trước
Cách tạo thư mục mới trong Launchpad trên macOS
Bài tiếp theoTruy cập dòng lệnh nhanh từ Windows Explorer
Bình luận
- Đăng bởi Vigna purohit ngày 29 tháng 7 năm 2017
Gặp lỗi ổ cắm khi kết nối [noaddrfound] và tôi không thể hiểu "đường dẫn" ở đây trong mã này là gì?
Đáp lại
Đăng bởi Patrick ngày 29 tháng 7 năm 2017
Tôi đã nhận được các lỗi tương tự. Đảm bảo chuỗi gốc cho máy chủ không bắt đầu bằng 'ftp. //' và kết thúc khi địa chỉ máy chủ kết thúc, không phải đường dẫn. Sau đó, bạn nhập đường dẫn sau. com/. tổ chức/. gov vào biến nguồn. Ví dụ. URI. ftp. // testftp. org/OneFolder/SecondFolder/ server = "testftp. org" source = "/OneFolder/SecondFolder/" Hy vọng điều này sẽ giúp ích cho Patrick
Đáp lại
- Đăng bởi Patrick Ngày 12 tháng 9 năm 2017
Tôi đã nhận được các lỗi tương tự. Đảm bảo chuỗi gốc cho máy chủ không bắt đầu bằng 'ftp. //' và kết thúc khi địa chỉ máy chủ kết thúc, không phải đường dẫn. Sau đó, bạn nhập đường dẫn sau. com/. tổ chức/. gov vào biến nguồn. Ví dụ. URI. ftp. // testftp. org/OneFolder/SecondFolder/ server = "testftp. org" source = "/OneFolder/SecondFolder/" Hy vọng điều này sẽ giúp ích cho Patrick
Đáp lại
Đăng bởi Sachin Ngày 1 tháng 12 năm 2017
Tôi muốn sao chép tất cả các tệp từ cục bộ sang FTP bằng Python. bạn có thể sửa đổi nó không tôi là người mới bắt đầu nên tôi không thể
Đáp lại
Đăng bởi Ben ngày 5 tháng 12 năm 2017
Tập lệnh này hoạt động như một bùa mê nhưng tôi muốn tải xuống toàn bộ thư mục gốc, không chỉ một thư mục được chỉ định. Cài đặt sau không hoạt động. source = "/" Ai đó có thể vui lòng cho tôi biết cách đặt đúng biến nguồn không?
Đáp lại
Đăng bởi Ben ngày 5 tháng 12 năm 2017
Xin chào, Tập lệnh này hoạt động như một bùa mê nhưng tôi muốn tải xuống toàn bộ thư mục gốc, không chỉ một thư mục được chỉ định. Cài đặt sau không hoạt động. source = "/" Ai đó có thể vui lòng cho tôi biết cách đặt đúng biến nguồn không?
Đáp lại
Đăng bởi Ethan ngày 6 tháng 6 năm 2018
Kịch bản tuyệt vời. Có ai đã thử cập nhật tập lệnh này để chỉ tải xuống các tệp từ các năm cụ thể trong một thư mục có các tệp được sắp xếp trong các thư mục con của năm chưa?