Tải xuống tất cả các tệp từ máy chủ ftp python

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 theo

Truy cập dòng lệnh nhanh từ Windows Explorer

Bình luận

  1. Đă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

  2. Đă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

  3. Đă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

  4. Đă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

  5. Đă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

  6. Đă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?

Chủ Đề