最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)下載監(jiān)控工具類:自動檢測并移動下載文件

 更新時間:2025年06月16日 09:14:36   作者:嘆一曲當時只道是尋常  
在日常開發(fā)和自動化任務中,經(jīng)常需要處理文件下載的場景,本文介紹一個實用的Python下載監(jiān)控工具類,能夠自動檢測新下載的文件并將其移動到指定位置,感興趣的小伙伴可以了解一下

背景介紹

在日常開發(fā)和自動化任務中,經(jīng)常需要處理文件下載的場景。無論是網(wǎng)頁自動化測試、爬蟲抓取數(shù)據(jù),還是自動備份文件,都需要一個可靠的方式來監(jiān)控下載目錄,并在文件下載完成后進行后續(xù)處理。本文介紹一個實用的Python下載監(jiān)控工具類,能夠自動檢測新下載的文件并將其移動到指定位置。

工具功能

這個Downloader類提供以下核心功能:

  • 監(jiān)控下載目錄:實時檢測指定目錄中新出現(xiàn)的文件
  • 忽略臨時文件:自動過濾瀏覽器下載過程中的臨時文件(如.crdownload, .tmp)
  • 文件移動與備份:將下載完成的文件移動到目標位置,支持備份或覆蓋現(xiàn)有文件
  • 超時控制:設置合理的等待時間,避免無限期阻塞

核心代碼解析

初始化配置

class Downloader():
    def __init__(self, download_dir, time_out=60, poll_frequency=0.5, 
                 exist_del=True, ignore_suffix_list=None):
        # 下載目錄
        self.download_dir = download_dir
        self.time_out = time_out  # 超時時間(秒)
        self.poll_frequency = poll_frequency  # 輪詢間隔(秒)
        self.exist_del = exist_del  # 目標文件存在時是否刪除
        # 忽略的臨時文件后綴
        self.ignore_suffix_list = ignore_suffix_list or [".crdownload", ".tmp"]

監(jiān)控啟動方法

    def watch_start(self):
        """記錄下載前的文件狀態(tài)"""
        path = Path(self.download_dir)
        files = set(path.glob("*"))
        self.path = path
        self.origin_files = files

文件檢測方法

    def get_download_file(self):
        """檢測新下載的文件"""
        start_time = perf_counter()
        while (perf_counter() - start_time <= self.time_out):
            now_files = set(self.path.glob("*"))
            # 計算新增文件
            diff_list = list(now_files.difference(self.origin_files))
            if not diff_list:
                sleep(self.poll_frequency)
                continue
            
            # 過濾臨時文件
            final_diff_list = []
            for item in diff_list:
                if Path(item).suffix not in self.ignore_suffix_list:
                    final_diff_list.append(item)
            
            # 處理有效文件
            if final_diff_list:
                if len(final_diff_list) > 1:
                    raise Exception("暫不支持監(jiān)控多個文件下載")
                return str(Path(final_diff_list[0]).resolve())
        
        return None

文件移動方法

    def download_file(self, file_path):
        """移動下載的文件到指定位置"""
        download_file = self.get_download_file()
        if download_file is None:
            raise Exception("下載超時,未獲取到文件")
        
        log.info(f"找到文件 {download_file}, 開始移動")
        target = Path(file_path)
        
        # 處理目標文件已存在的情況
        if target.exists():
            if self.exist_del:
                target.unlink()  # 刪除現(xiàn)有文件
            else:
                # 創(chuàng)建帶時間戳的備份文件
                suffix = target.suffix
                timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
                backup_path = target.with_name(
                    f"{target.stem}_{timestamp}_bak{suffix}"
                )
                shutil.move(file_path, backup_path)
        
        # 移動文件到目標位置
        shutil.move(download_file, file_path)

使用示例

if __name__ == "__main__":
    log.basicConfig(level=log.INFO)
    
    # 初始化下載監(jiān)控器
    downloader = Downloader(
        download_dir=r"C:\Users\user\Downloads",  # 監(jiān)控的下載目錄
        time_out=120,           # 超時時間2分鐘
        poll_frequency=0.2,     # 每0.2秒檢查一次
        exist_del=False         # 目標文件存在時創(chuàng)建備份
    )
    
    # 開始監(jiān)控
    downloader.watch_start()
    
    # 這里應該觸發(fā)下載操作(例如:點擊下載鏈接)
    # 示例:使用Selenium下載文件
    # driver.find_element(By.ID, "downloadButton").click()
    
    try:
        # 獲取并移動下載的文件
        downloader.download_file(r"D:\project\data\report.xlsx")
        log.info("文件下載并移動成功!")
    except Exception as e:
        log.error(f"下載失敗: {str(e)}")

總結

本文介紹的下載監(jiān)控工具提供了一個簡單而強大的解決方案,用于自動化處理文件下載任務。通過合理設置超時時間、輪詢頻率和臨時文件過濾規(guī)則,可以適應各種下載場景。工具的核心思路是通過比較目錄快照的變化來檢測新文件,然后進行后續(xù)處理。

這個工具類具有以下優(yōu)勢:

輕量級:不依賴外部庫,標準庫實現(xiàn)

可配置:靈活的參數(shù)設置適應不同需求

健壯性:完善的錯誤處理和超時機制

易集成:可以輕松集成到現(xiàn)有自動化流程中

到此這篇關于Python實現(xiàn)下載監(jiān)控工具類:自動檢測并移動下載文件的文章就介紹到這了,更多相關Python下載監(jiān)控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python操作mysql代碼總結

    python操作mysql代碼總結

    本篇文章給大家分享了python操作mysql的步驟以及相關實例代碼,對此有需要的朋友可以參考學習下。
    2018-06-06
  • 用python簡單實現(xiàn)mysql數(shù)據(jù)同步到ElasticSearch的教程

    用python簡單實現(xiàn)mysql數(shù)據(jù)同步到ElasticSearch的教程

    今天小編就為大家分享一篇用python簡單實現(xiàn)mysql數(shù)據(jù)同步到ElasticSearch的教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 如何提高python 中for循環(huán)的效率

    如何提高python 中for循環(huán)的效率

    這篇文章主要介紹了如何提高python 中for循環(huán)的效率,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 通過Python實現(xiàn)一個A/B測試詳解

    通過Python實現(xiàn)一個A/B測試詳解

    A/B測試,通過分析兩種不同的營銷策略,以此來選擇最佳的營銷策略,可以高效地將流量轉化為銷售額。本文主要介紹了如何通過Python實現(xiàn)一個A/B測試,感興趣的可以了解一下
    2023-01-01
  • python網(wǎng)絡爬蟲采集聯(lián)想詞示例

    python網(wǎng)絡爬蟲采集聯(lián)想詞示例

    這篇文章主要介紹了python網(wǎng)絡爬蟲采集聯(lián)想詞示例,需要的朋友可以參考下
    2014-02-02
  • Python中dataclass庫實例詳解

    Python中dataclass庫實例詳解

    這篇文章主要介紹了Python中dataclass庫,合理使用dataclass將會大大減輕開發(fā)中的負擔,將我們從大量的重復勞動中解放出來,這既是dataclass的魅力,本文結合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2022-09-09
  • python3實現(xiàn)網(wǎng)頁版raspberry pi(樹莓派)小車控制

    python3實現(xiàn)網(wǎng)頁版raspberry pi(樹莓派)小車控制

    這篇文章主要為大家詳細介紹了python3實現(xiàn)網(wǎng)頁版raspberry pi(樹莓派)小車控制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 利用Python如何批量修改數(shù)據(jù)庫執(zhí)行Sql文件

    利用Python如何批量修改數(shù)據(jù)庫執(zhí)行Sql文件

    這篇文章主要給大家介紹了關于利用Python如何批量修改數(shù)據(jù)庫執(zhí)行Sql文件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • Python實現(xiàn)自動收集參數(shù)的技巧分享

    Python實現(xiàn)自動收集參數(shù)的技巧分享

    在Python中,充分利用函數(shù)參數(shù)的自動收集和靈活處理,是寫出高效且易維護代碼的關鍵之一,本文將深入研究Python函數(shù)參數(shù)的收集方式,感興趣的小伙伴可以了解下
    2023-12-12
  • python+mysql實現(xiàn)個人論文管理系統(tǒng)

    python+mysql實現(xiàn)個人論文管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python+mysql實現(xiàn)個人論文管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評論

安徽省| 岑巩县| 略阳县| 德州市| 佛冈县| 花垣县| 昌平区| 景泰县| 临漳县| 抚顺县| 营口市| 施甸县| 重庆市| 象州县| 勐海县| 峨眉山市| 东丽区| 延庆县| 潜江市| 濮阳县| 淅川县| 木兰县| 盐池县| 三门峡市| 梁山县| 定州市| 宁河县| 烟台市| 阿克| 华宁县| 根河市| 康定县| 仙游县| 延川县| 奉化市| 白沙| 华容县| 从江县| 固阳县| 雷州市| 高尔夫|