Python ftplib文件夾操作指南

ALXU9 數碼 1

對於Python開發工程師而言,ftplib庫是十分常用的一個庫之一,其可以方便地操作FTP服務器,快速實現文件上傳、下載等操作。本篇文章將以Python ftplib庫為中心,介紹如何對FTP服務器上的文件夾進行操作。

在使用ftplib庫對FTP服務器進行操作之前,必須先連接到FTP服務器。連接FTP服務器需要使用FTP類的實例化對象,通過其connect函數進行連接。

import ftplib

ftp = ftplib.FTP()
ftp.connect("ftpserver.com", 21)
ftp.login("username", "password")

其中,FTP類的默認連接端口為21,如果FTP服務器連接採用了不同的端口,需要在connect函數中指定端口號。

創建文件夾是FTP服務器上經常使用的一個操作。ftplib庫中,創建文件夾是通過FTP類的mkd函數來實現的。

ftp.mkd("new_folder")

上述代碼即可在FTP服務器上創建一個名為”new_folder”的文件夾。需要注意的是,ftp用戶必須擁有創建文件夾的權限。在文件夾創建成功之後,可以通過dir()函數查看FTP服務器上的目錄結構。

刪除文件夾同樣是FTP服務器上的常用操作。與創建文件夾不同的是,刪除文件夾需要先進入該文件夾。ftplib庫中,可以通過FTP類的cwd函數進入文件夾,再使用rmd函數刪除該文件夾。

ftp.cwd("new_folder")
ftp.rmd("new_folder")

上述代碼可以先進入FTP服務器上的”new_folder”文件夾中,然後刪除該文件夾。需要注意的是,刪除文件夾時文件夾需要是空的,否則無法刪除。

上傳文件夾是ftplib庫中一個比較複雜的操作,因為FTP服務器上的文件夾可能包含多個文件和子文件夾。在ftplib庫中,上傳文件夾可以通過遞歸上傳其內部所有文件和文件夾實現。

def upload(ftp, local_folder_path, remote_folder_path):
    """
    FTP上傳文件夾
    :param ftp: FTP實例化對象
    :param local_folder_path: 本地文件夾路徑
    :param remote_folder_path: 遠程FTP文件夾路徑
    :return: 
    """
    for file_name in os.listdir(local_folder_path):
        local_file_path = local_folder_path + "/" + file_name
        remote_file_path = remote_folder_path + "/" + file_name
        if os.path.isfile(local_file_path):
            with open(local_file_path, "rb") as f:
                ftp.storbinary(f"STOR {remote_file_path}", f)
        elif os.path.isdir(local_file_path):
            try:
                ftp.mkd(remote_file_path)
            except:
                pass
            ftp.cwd(remote_file_path)
            upload(ftp, local_file_path, remote_file_path)
            ftp.cwd("..")

上述代碼定義了一個upload函數,遞歸遍曆本地文件夾,上傳所有文件和子文件夾。在上傳過程中,使用storbinary函數上傳二進制文件,使用mkd函數在FTP服務器上創建文件夾。

下載文件夾與上傳文件夾類似,同樣需要遞歸下載其中所有文件和文件夾。在ftplib庫中,可以使用nlst函數獲取FTP服務器上的所有文件和文件夾的名稱列表,然後遞歸下載其中所有文件和文件夾。

def download(ftp, remote_folder_path, local_folder_path):
    """
    FTP下載文件夾
    :param ftp: FTP實例化對象
    :param remote_folder_path: 遠程FTP文件夾路徑
    :param local_folder_path: 本地文件夾路徑
    :return: 
    """
    if not os.path.exists(local_folder_path):
        os.mkdir(local_folder_path)
    ftp.cwd(remote_folder_path)
    for file_name in ftp.nlst():
        remote_file_path = remote_folder_path + "/" + file_name
        local_file_path = local_folder_path + "/" + file_name
        if ftp.nlst(remote_file_path) == []:
            with open(local_file_path, "wb") as f:
                ftp.retrbinary(f"RETR {remote_file_path}", f.write)
        else:
            download(ftp, remote_file_path, local_file_path)
    ftp.cwd("..")

上述代碼定義了一個download函數,遞歸遍歷FTP服務器上的文件夾,下載其中所有文件和子文件夾。在下載過程中,使用retrbinary函數下載二進制文件,在本地創建文件夾。

本篇文章主要介紹了如何使用Python ftplib庫對FTP服務器上的文件夾進行操作。具體來說,包括連接FTP服務器、創建文件夾、刪除文件夾、上傳文件夾、下載文件夾等操作。

回復

共1條回復 我來回復
  • 暫無回復內容