Hướng dẫn ftp check if file exists python - ftp kiểm tra xem tệp có tồn tại python không

=> Tôi đã tìm thấy trang web này trong khi googling để tìm cách kiểm tra xem một tệp có tồn tại bằng FTPLIB trong Python không. Sau đây là những gì tôi đã tìm ra (hy vọng nó sẽ giúp được với ai đó):

=> Khi cố gắng liệt kê các tệp/thư mục không tồn tại, ftplib sẽ tăng một ngoại lệ. Mặc dù việc thêm thử/ngoại trừ khối là một thông lệ tiêu chuẩn và một ý tưởng tốt, tôi chỉ thích các tập lệnh FTP của mình để tải xuống (các) tệp sau khi đảm bảo chúng tồn tại. Điều này giúp giữ cho các tập lệnh của tôi đơn giản hơn - ít nhất là khi liệt kê một thư mục trên máy chủ FTP là có thể.

Ví dụ: máy chủ EDGAR FTP có nhiều tệp được lưu trữ theo thư mục/edgar/index hàng ngày/. Mỗi tập tin được đặt tên là "Master.yyymmdd.idx". Không có gì đảm bảo rằng một tập tin sẽ tồn tại cho mỗi ngày (yyyymmdd) - không có tệp ngày 24 tháng 11 năm 2013, nhưng có một tệp ngày: 22 tháng 11 năm 2013. Liệt kê hoạt động như thế nào trong hai trường hợp này?

# Code
from __future__ import print_function  
import ftplib  

ftp_client = ftplib.FTP("ftp.sec.gov", "anonymous", "")  
resp = ftp_client.sendcmd("MLST /edgar/daily-index/master.20131122.idx")  
print(resp)   
resp = ftp_client.sendcmd("MLST /edgar/daily-index/master.20131124.idx")  
print(resp)  

# Output
250-Start of list for /edgar/daily-index/master.20131122.idx  
modify=20131123030124;perm=adfr;size=301580;type=file;unique=11UAEAA398;  
UNIX.group=1;UNIX.mode=0644;UNIX.owner=1019;  
/edgar/daily-index/master.20131122.idx
250 End of list  

Traceback (most recent call last):
File "", line 10, in 
resp = ftp_client.sendcmd("MLST /edgar/daily-index/master.20131124.idx")
File "lib/python2.7/ftplib.py", line 244, in sendcmd
return self.getresp()
File "lib/python2.7/ftplib.py", line 219, in getresp
raise error_perm, resp
ftplib.error_perm: 550 '/edgar/daily-index/master.20131124.idx' cannot be listed

Như mong đợi, việc liệt kê một tệp không tồn tại tạo ra một ngoại lệ.

=> Vì tôi biết rằng máy chủ EDGAR FTP chắc chắn sẽ có thư mục/edgar/index hàng ngày/, tập lệnh của tôi có thể làm như sau để tránh nêu các ngoại lệ do các tệp không tồn tại: a) Liệt kê thư mục này. b) Tải xuống (các) tệp cần thiết nếu chúng có mặt trong danh sách này - để kiểm tra danh sách, tôi thường thực hiện tìm kiếm regexp, trên danh sách các chuỗi mà hoạt động niêm yết trả về.
a) list this directory.
b) download the required file(s) if they are are present in this listing - To check the listing I typically perform a regexp search, on the list of strings that the listing operation returns.

Ví dụ, tập lệnh này cố gắng tải xuống các tệp trong ba ngày qua. Nếu một tệp được tìm thấy cho một ngày nhất định thì nó được tải xuống, nếu không có gì xảy ra.

import ftplib
import re
from datetime import date, timedelta

ftp_client = ftplib.FTP("ftp.sec.gov", "anonymous", "")
listing = []
# List the directory and store each directory entry as a string in an array
ftp_client.retrlines("LIST /edgar/daily-index", listing.append)
# go back 1,2 and 3 days
for diff in [1,2,3]:
  today = (date.today() - timedelta(days=diff)).strftime("%Y%m%d")
  month = (date.today() - timedelta(days=diff)).strftime("%Y_%m")
  # the absolute path of the file we want to download - if it indeed exists
  file_path = "/edgar/daily-index/master.%(date)s.idx" % { "date": today }
  # create a regex to match the file's name
  pattern = re.compile("master.%(date)s.idx" % { "date": today })
  # filter out elements from the listing that match the pattern
  found = filter(lambda x: re.search(pattern, x) != None, listing)
  if( len(found) > 0 ):
    ftp_client.retrbinary(
      "RETR %(file_path)s" % { "file_path": file_path },
      open(
        './edgar/daily-index/%(month)s/master.%(date)s.idx' % {
          "date": today
        }, 'wb'
      ).write
    )

=> Thật thú vị, có những tình huống chúng tôi không thể liệt kê một thư mục trên máy chủ FTP. Ví dụ, máy chủ EDGAR FTP, không biết danh sách trên /edgar /dữ liệu vì nó chứa quá nhiều thư mục phụ. Trong những trường hợp như vậy, tôi sẽ không thể sử dụng phương pháp "Danh sách và kiểm tra sự tồn tại" được mô tả ở đây - trong những trường hợp này, tôi sẽ phải sử dụng xử lý ngoại lệ trong tập lệnh trình tải xuống của mình để khôi phục từ các lần thử truy cập thư mục/thư mục không tồn tại.

Tessa Lau

unread,

Ngày 11 tháng 7 năm 1996, 3:00:00 PM7/11/967/11/96

đến

Ftplib làm gì Python?

Python có một mô -đun gọi là ftplib cho phép chuyển các tệp thông qua giao thức FTP. Mô -đun FTPLIB cho phép chúng tôi triển khai phía máy khách của giao thức FTP và nó cho phép người dùng kết nối với máy chủ để gửi và nhận tệp.
different ftp servers. What's the best way to verify existence, without
actually getting the file? Right now, my solution is to do an
ftp.sendcmd('stat /path/to/file') and parse the results---but this only
works when the remote server is a unix server and returns the output of
/bin/ls. And it gets messy when I want to stat a directory instead of a
file.

Làm cách nào để truy cập FTP trong Python?

Thanks!--Tessa
--Tessa

Phương pháp FTP phổ biến.
Tessa Lau <>
Maintainer of the Linux Game Tome (using python!)

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 đặc tả giao thức FTP. ....

unread,

Ngày 11 tháng 7 năm 1996, 3:00:00 PM7/11/967/11/96

đến

Ftplib làm gì Python?
: Hi there,

Python có một mô -đun gọi là ftplib cho phép chuyển các tệp thông qua giao thức FTP. Mô -đun FTPLIB cho phép chúng tôi triển khai phía máy khách của giao thức FTP và nó cho phép người dùng kết nối với máy chủ để gửi và nhận tệp.
: different ftp servers. What's the best way to verify existence, without
: actually getting the file? Right now, my solution is to do an
: ftp.sendcmd('stat /path/to/file') and parse the results---but this only
: works when the remote server is a unix server and returns the output of
: /bin/ls. And it gets messy when I want to stat a directory instead of a
: file.

Issue:

Làm cách nào để truy cập FTP trong Python?

Phương pháp FTP phổ biến.

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 đặc tả giao thức FTP. ....

Đăng nhập ([Người dùng [, Passwd [, ACCT]]]]) Đăng nhập dưới dạng người dùng đã cho. ....

unread,

Ngày 12 tháng 7 năm 1996, 3:00:00 PM7/12/967/12/96

đến

Lấy lại (lệnh [, gọi lại]) Truy xuất một danh sách tệp hoặc thư mục trong chế độ chuyển ASCII ..

Làm cách nào để tải xuống một tệp bằng FTP trong Python?
>I'm writing a script which verifies the existence of several files on
>different ftp servers. What's the best way to verify existence, without
>actually getting the file?

Cách tải xuống và tải lên các tệp trong máy chủ FTP bằng Python.

server.size(filename)

Nó ném một ngoại lệ nếu tệp không có hoặc nếu đó là một thư mục.

Regards,Martin
Martin

Tessa Lau

unread,

Ngày 12 tháng 7 năm 1996, 3:00:00 PM7/12/967/12/96

đến

Ftplib làm gì Python?

Python có một mô -đun gọi là ftplib cho phép chuyển các tệp thông qua giao thức FTP. Mô -đun FTPLIB cho phép chúng tôi triển khai phía máy khách của giao thức FTP và nó cho phép người dùng kết nối với máy chủ để gửi và nhận tệp.allows the transfer of files through the FTP protocol. The ftplib module allows us to implement the client side of the FTP protocol, and it allows users to connect to servers in order to send and receive files.

Làm cách nào để truy cập FTP trong Python?

Phương pháp FTP phổ biến..
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 đặc tả giao thức FTP.....
Đăng nhập ([Người dùng [, Passwd [, ACCT]]]]) Đăng nhập dưới dạng người dùng đã cho.....
Lấy lại (lệnh [, gọi lại]) Truy xuất một danh sách tệp hoặc thư mục trong chế độ chuyển ASCII ..

Làm cách nào để tải xuống một tệp bằng FTP trong Python?

Cách tải xuống và tải lên các tệp trong máy chủ FTP bằng Python..
Nhập ftplib ftp_host = "ftp.dlptest.com" ftp_user = "[email protected]" ftp_pass = "szmf7rte4pcrf9dv286gune4n".
# Kết nối với máy chủ FTP ftp = ftplib ..

Làm cách nào để đóng kết nối FTP trong Python?

Phương thức thoát () một cách duyên dáng đóng kết nối FTP với máy chủ.Sau khi bỏ () được gọi, đối tượng FTP không thể được sử dụng bằng cách gọi lại phương thức Connect ().Phương thức thoát () bên trong gửi lệnh thoát đến máy chủ FTP. gracefully closes the FTP connection with the server. Once quit() is called, the FTP object can not be used by calling the connect() method again. The quit() method internally sends the QUIT command to the FTP server.