亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

用Python從零打造桌面文件管理工具:實戰(zhàn)全記錄

用Python從零打造桌面文件管理工具:實戰(zhàn)全記錄 上個月我整理素材庫的時候?qū)χ?5000 多個混雜文件實在忍無可忍——照片、PDF、老項目里的散落代碼、各種版本的文檔全擠在一個目錄里Windows 自帶資源管理器翻幾層就轉(zhuǎn)圈批量重命名要下第三方工具找重復(fù)文件更是全靠眼力。于是花了一個周末用 Python 從零寫了一個桌面文件管理工具。這篇文章就是完整的開發(fā)全過程實錄從需求拆解、技術(shù)選型、框架搭建到核心源碼解析、踩坑修復(fù)、打包發(fā)布一路記到底。如果你是剛開始學(xué) Python、想找一個小而完整的實戰(zhàn)項目練手或者正打算給自己寫個順手的效率工具這個項目的復(fù)雜度剛剛好——既不是幾百行的玩具也不是動輒上萬行的重型工程。為什么我要強調(diào)從零打造而不是直接推薦現(xiàn)成軟件原因很簡單現(xiàn)成的文件管理工具要么收費要么帶著一堆你用不上的功能更別說自定義批量重命名的規(guī)則了。自己寫一個功能自己定邏輯自己掌控后續(xù)想加什么功能隨時能改。文章里所有代碼我都按模塊拆分講解該貼的關(guān)鍵代碼一行不少踩過的坑也全部記錄下來希望能讓你少走幾個彎路。1. 需求拆解先把文件管理拆成可落地的功能清單1.1 我到底在煩什么三個真實使用場景寫工具之前我得先搞清楚自己最受不了的幾種情況。第一是批量重命名比如一堆IMG_20230101_123456.jpg這樣的照片文件我想統(tǒng)一改成2023年1月_01.jpg這種一眼能看懂的名字靠手一個個改純屬折磨用系統(tǒng)自帶的 F2 又只能一個一個來。第二是重復(fù)文件清理我給客戶整理素材時經(jīng)常收到幾十封郵件里面帶的附件反復(fù)轉(zhuǎn)發(fā)同名同內(nèi)容的文件散落在不同文件夾占用空間還是小事真要命的是搞不清楚哪個版本是最新的只能靠哈希比對把完全一樣的找出來。第三是分類歸檔一個下載目錄里混著 exe、zip、pdf、png我想按擴(kuò)展名自動扔進(jìn)對應(yīng)的子目錄省得每次手動新建文件夾再拖拽。這三個場景其實就是這個工具的第一期核心需求。我寫了一條原則擺在自己面前只做這三件事不做全能文件管理器。因為一旦想做多功能膨脹的速度會遠(yuǎn)超你完成的速度。1.2 功能邊界做什么與不做什么明確不做什么比做什么更重要這是我給自己定的規(guī)矩。就拿編輯功能來說雖然我可以集成一個簡單的文本查看器進(jìn)去但真要做得好還得處理大文件、編碼檢測、語法高亮工作量直接翻倍而且和我做這個工具的初衷——管理文件而非編輯文件——是相悖的。所以我用一張表格把第一版的功能邊界釘死功能模塊第一版必須實現(xiàn)明確不做文件瀏覽目錄樹 文件列表雙欄瀏覽不做實時預(yù)覽、不做縮略圖批量重命名正則表達(dá)式匹配替換、命名預(yù)覽不做序號批量插入的復(fù)雜模板重復(fù)檢測先按大小分組再哈希校驗不做內(nèi)容相似度比對那需要專門的算法分類歸檔按擴(kuò)展名自動移動文件不做基于內(nèi)容類型識別比如判斷某個文件是不是圖片安全機制所有操作前確認(rèn)、操作后可撤銷不做回收站式恢復(fù)涉及系統(tǒng)底層接口容易出問題這張表幫我擋掉了至少一半的邊做邊加功能的沖動。日常使用中撤銷這個功能我后來發(fā)現(xiàn)其實極其重要所以留到后面單獨講。1.3 目標(biāo)用戶畫像與開發(fā)預(yù)期我琢磨了一下這個工具最可能的用戶是像我自己這樣的開發(fā)者、設(shè)計師、自由職業(yè)者手上攢了一堆本地文件又不想把隱私資料傳到云端做整理。所以界面要簡潔操作要直給最好雙擊就能跑起來別讓使用者裝一堆 Python 依賴?;谶@個預(yù)期我最后選擇了 Tkinter 而不是 PyQt原因下一章詳細(xì)說。2. 技術(shù)選型為什么用 Tkinter 而不是 PyQt2.1 GUI 框架對比成本與收益的權(quán)衡選 GUI 框架是第一個繞不開的決定。我把幾個主流方案擺在一起做過對比核心考慮因素有三個寫代碼的成本、打包出來的體積、以及跨平臺的表現(xiàn)??蚣芤蕾嚺c安裝打包體積學(xué)習(xí)曲線界面美觀度適合場景TkinterPython 標(biāo)準(zhǔn)庫自帶無需單獨安裝打包后約 10-20MB平緩API 不多一般原生感內(nèi)部工具、快速原型、個人效率工具PyQt / PySide需要單獨安裝約 500MB打包后通常 50MB較陡概念多現(xiàn)代控件豐富商業(yè)級桌面應(yīng)用、追求質(zhì)感的項目wxPython需要單獨安裝打包后 30MB中等較原生需要原生外觀的跨平臺應(yīng)用我最終選了 Tkinter原因非常務(wù)實它內(nèi)置于 Python 標(biāo)準(zhǔn)庫寫這個工具的用戶不需要額外安裝 500MB 的 GUI 框架我打包也不用背著 PyQt5 的 Qt 庫到處跑。更關(guān)鍵的是我做的這些功能——樹狀列表、表格、按鈕、對話框——Tkinter 的 ttk 控件完全夠用沒必要為了一兩個炫酷控件扛上一個重型框架。2.2 文件操作核心庫os、shutil、pathlib 誰干什么活GUI 框架定了文件操作這塊的選型同樣重要。Python 里做文件操作主要有三個庫很多新手搞不清它們的區(qū)別我用一句話說明白o(hù)s是全能老將什么都能干但接口偏底層路徑拼接容易寫亂。shutil是文件搬運工復(fù)制、移動、壓縮都是它的強項。pathlib是面向?qū)ο蟮穆窂叫沦F用Path對象鏈?zhǔn)讲僮骺勺x性最強我主力用這一個。這個項目里路徑遍歷和重命名我用pathlib因為它處理跨平臺路徑分隔符特別干凈比如Path(a/b/c).parent返回a/b不用像os.path.dirname那樣繞。文件移動和復(fù)制我用shutil.move和shutil.copy2因為前者支持跨目錄移動后者可以保留文件元數(shù)據(jù)修改時間等這對管理素材文件很重要。os則退到后臺只在需要os.walk掃描目錄或者讀取環(huán)境變量時才用但說實話Path.rglob已經(jīng)能替代os.walk了。2.3 哈希算法找重復(fù)文件的關(guān)鍵檢測重復(fù)文件核心是用哈希算法給文件算一個指紋。我用的是hashlib里的 MD5 和 SHA256。先說結(jié)論第一版我用 MD5因為計算速度比 SHA256 快不少后來考慮到極端情況下 MD5 有可能碰撞兩個不同文件的 MD5 相同我在最終比對時又加了一層 SHA256 做二次確認(rèn)。但這么做的前提是只有文件大小相同的一組文件才做哈希比對這能在絕大多數(shù)場景下把需要算哈希的文件數(shù)量減少 90% 以上具體原理在第四章展開。3. 架構(gòu)設(shè)計一個桌面小工具的分層思路3.1 用 MVC 思想給單機腳本治病很多 Python 新手做桌面小工具最容易犯的毛病是所有代碼揉在一個文件里界面邏輯和業(yè)務(wù)邏輯纏繞在一起按鈕的回調(diào)函數(shù)里直接寫文件遍歷和重命名操作。剛開始看著沒問題一旦要加取消操作或者操作進(jìn)度條就會發(fā)現(xiàn)代碼根本無從下手。我給這個項目定的架構(gòu)是簡化版 MVC但要明確分工Model模型層只負(fù)責(zé)文件操作邏輯比如FileScanner.scan()返回文件列表Renamer.rename()接受新舊文件名映射并執(zhí)行操作這一層完全不認(rèn)識 Tkinter。View視圖層只負(fù)責(zé)界面展示Tkinter 控件全部在這層負(fù)責(zé)把 Model 返回的數(shù)據(jù)渲染到界面上。Controller控制器負(fù)責(zé)事件轉(zhuǎn)發(fā)比如用戶點擊按鈕后調(diào)用對應(yīng)的 Model 方法再把結(jié)果回填到 View。這樣分層最大的好處是UI 改版不影響底層邏輯底層邏輯換實現(xiàn)比如把 MD5 換成 BLAKE2也不碰 UI。后面我測試的時候可以完全不打開界面直接調(diào)用 Model 層寫單元測試這可比手動點點點高效多了。3.2 工程目錄從第 1 行代碼開始就分好模塊這個項目的最終目錄結(jié)構(gòu)如下每個文件的職責(zé)一眼能看明白file_manager/ ├── app.py # 程序入口負(fù)責(zé)啟動 Tkinter 主窗口 ├── models/ │ ├── __init__.py │ ├── scanner.py # 目錄掃描與文件遍歷生成器實現(xiàn) │ ├── renamer.py # 批量重命名邏輯 │ ├── deduplicator.py # 重復(fù)文件檢測 │ └── organiser.py # 按擴(kuò)展名歸檔 ├── views/ │ ├── __init__.py │ ├── main_window.py # 主窗口布局左側(cè)目錄樹 右側(cè)文件列表 │ ├── rename_dialog.py # 批量重命名對話框 │ └── progress_dialog.py # 帶進(jìn)度條的對話框 ├── controllers/ │ ├── __init__.py │ └── file_controller.py # 事件綁定與線程調(diào)度 ├── tests/ │ ├── test_renamer.py │ ├── test_scanner.py │ └── test_deduplicator.py └── requirements.txt # 本項目為零第三方依賴文件僅為記錄我特別建了tests目錄雖然很多人寫小工具不寫測試但文件重命名這種操作一旦出錯就是不可逆的改錯名字想回來很麻煩所以我給核心邏輯都補了測試。這也是我從這個項目里學(xué)到的很值的一件事桌面工具的核心邏輯先把它當(dāng)庫來寫再往界面上套。4. 核心功能實現(xiàn)與源碼級講解4.1 雙欄文件瀏覽目錄樹與文件列表如何聯(lián)動先寫界面最核心的部分左側(cè)目錄樹右側(cè)文件列表。我用的是ttk.Treeview這個控件既能做樹狀展示左側(cè)也能做成帶表頭的表格右側(cè)。左側(cè)目錄樹的填充邏輯很簡單每次點開某個節(jié)點時才去掃描它的下一級子目錄這種延遲加載是避免一啟動就掃描全盤導(dǎo)致卡死的關(guān)鍵。我寫了一個scan_subdirs方法from pathlib import Path import tkinter.ttk as ttk def load_children(tree: ttk.Treeview, parent_item: str, path: Path): 把 path 的下一級子目錄插入樹節(jié)點 try: children sorted( [p for p in path.iterdir() if p.is_dir()], keylambda p: p.name.lower() ) except PermissionError: return # 無權(quán)限的目錄直接跳過不能阻止整個界面 if not children: return tree.delete(*tree.get_children(parent_item)) # 防止重復(fù)展開時殘留臟數(shù)據(jù) for child in children: node_id tree.insert(parent_item, end, textchild.name, values[str(child)]) # 給每個目錄預(yù)置一個空子節(jié)點保證顯示展開箭頭 tree.insert(node_id, end, textplaceholder)注意我特意在每層都預(yù)置一個 placeholder 空節(jié)點這是 Tkinter 樹控件的一個小 trick如果目錄下沒有子節(jié)點就不會顯示展開箭頭用戶就不知道這里還能展開體驗很差。右側(cè)文件列表綁定tree.TreeviewSelect事件用戶點擊目錄節(jié)點時觸發(fā)刷新def on_tree_select(event): selected tree.selection() if not selected: return node_id selected[0] path Path(tree.item(node_id, values)[0]) if not path.is_dir(): return file_list.delete(*file_list.get_children()) try: entries sorted(path.iterdir(), keylambda p: (p.is_dir(), p.name.lower())) except PermissionError: return for entry in entries: if entry.is_dir(): kind 文件夾 else: kind entry.suffix.lstrip(.).upper() or 文件 file_list.insert(, end, values(entry.name, kind, entry.stat().st_size))這個聯(lián)動界面是整個工具的地基其他所有功能都是基于當(dāng)前選中的路徑來操作的。4.2 批量重命名正則替換、預(yù)覽與撤銷批量重命名我研究了半天需求最后確定最核心的功能是正則表達(dá)式替換。這個功能強到什么程度呢比如一堆文件叫IMG_20230101_123456.jpg我只要寫一條規(guī)則IMG_\d{8}_\d{6}替換為Photo_20230101所有文件就都能改過來。實現(xiàn)的核心是一個純函數(shù)輸入文件列表、正則模式、替換串輸出一個映射表。這個函數(shù)放在 Model 層不帶任何 GUI 依賴import re from pathlib import Path from dataclasses import dataclass dataclass class RenameItem: source: Path target: Path ok: bool True error: str def build_rename_plan(files: list[Path], pattern: str, replacement: str) - list[RenameItem]: 根據(jù)正則表達(dá)式生成重命名計劃不執(zhí)行任何實際改動 regex re.compile(pattern) plan [] used_names set() for f in files: new_name regex.sub(replacement, f.name) if new_name f.name: continue # 文件名沒變化不生成計劃 target f.with_name(new_name) if target in used_names or target.exists(): plan.append(RenameItem(f, target, okFalse, error目標(biāo)文件已存在)) continue if target.name in {item.target.name for item in plan}: plan.append(RenameItem(f, target, okFalse, error命名沖突)) continue used_names.add(new_name) plan.append(RenameItem(f, target)) return plan這里我攔了兩個最容易破防的地方。第一target.exists()檢查目標(biāo)文件是否已經(jīng)存在避免覆蓋已經(jīng)存在的文件第二我維護(hù)了一個used_names集合防止兩個源文件改名后撞到同一個名字——這種情況在批量改名時非常常見比如文件a.txt和a.txt.bak同時把a替換成b就會出現(xiàn)兩個文件都變成b.txt。執(zhí)行計劃的函數(shù)就更直接了但有個坑必須繞開不能用Path.rename()直接覆蓋已有文件。所以我在執(zhí)行前把所有目標(biāo)沖突項全部過濾一遍只有okTrue的才真正執(zhí)行def execute_rename_plan(plan: list[RenameItem]) - tuple[int, list[str]]: success 0 errors [] for item in plan: if not item.ok: continue try: item.source.rename(item.target) success 1 except OSError as exc: errors.append(f{item.source.name}: {exc.strerror}) return success, errors撤銷功能我一開始沒做但第一次試跑就后悔了——我寫了一條規(guī)則結(jié)果把所有文件名的前綴都刪掉了當(dāng)場傻眼。后來我加了一個原名字映射表,每次執(zhí)行前先把源路徑和目標(biāo)路徑存成一個 JSON 備份文件撤銷時就交換 source 和 target 再跑一遍同樣的函數(shù)。這招成本極低但救命效果極強。4.3 重復(fù)文件檢測先按大小分組再做哈希比對重復(fù)文件檢測如果不加任何優(yōu)化就是遍歷所有文件然后兩兩比對哈希兩三萬個文件的目錄直接卡死。我采用了兩級篩選策略第一步按文件大小分組。相同內(nèi)容的文件文件大小一定相同。所以我把所有文件按大小放進(jìn)字典大小為 key文件列表為 value。只有同一個 key 下有超過一個文件的才有可能是重復(fù)文件。這一步的空間復(fù)雜度是 O(n)但能把需要做哈希的文件數(shù)量砍掉 90% 以上因為絕大多數(shù)文件的 size 都是唯一的。第二步組內(nèi)做哈希比對。同大小的文件再算 MD5如果 MD5 也相同再進(jìn)行 SHA256 二次確認(rèn)。為了讀大文件不占用太多內(nèi)存我用流式讀取每次只讀 64KBimport hashlib from pathlib import Path from collections import defaultdict def _file_hash(path: Path, chunk_size65536) - str: md5 hashlib.md5() with open(path, rb) as f: while True: chunk f.read(chunk_size) if not chunk: break md5.update(chunk) return md5.hexdigest() def find_duplicates(root: Path) - dict[str, list[Path]]: size_map defaultdict(list) # 第一輪只按大小分組不進(jìn)哈希 for p in root.rglob(*): if p.is_file(): try: size p.stat().st_size size_map[size].append(p) except OSError: continue # 第二輪只處理同大小組內(nèi)多于一個文件的分組 dup_groups defaultdict(list) for files in size_map.values(): if len(files) 2: continue for f in files: h _file_hash(f) dup_groups[h].append(f) # 第三輪過濾掉組內(nèi)只有一個文件的 return {h: paths for h, paths in dup_groups.items() if len(paths) 1}這個實現(xiàn)第一版跑 5 萬多個文件花了約 40 秒主要時間花在遍歷目錄和統(tǒng)計大小上。后來我優(yōu)化了遍歷邏輯改用os.scandir做遞歸遍歷而不是rglob因為rglob在底層會創(chuàng)建大量Path對象性能差了不少。改完之后同樣規(guī)模的數(shù)據(jù)約 15 秒搞定這個經(jīng)驗我記在了筆記里大規(guī)模文件掃描首選os.scandir它返回的是輕量的DirEntry對象不會做多余的路徑解析。4.4 按擴(kuò)展名歸檔shutil.move 里的隱藏陷阱按擴(kuò)展名歸檔是四件事里最簡單的但也是踩坑最多的。核心邏輯不復(fù)雜from pathlib import Path import shutil def organize_by_extension(files: list[Path], target_root: Path) - dict[str, int]: result defaultdict(int) for f in files: if not f.is_file(): continue ext f.suffix.lstrip(.).lower() or no_extension dest_dir target_root / ext try: dest_dir.mkdir(parentsTrue, exist_okTrue) shutil.move(str(f), str(dest_dir / f.name)) result[ext] 1 except shutil.Error as exc: # 非常容易踩的坑目標(biāo)目錄里已有同名文件 result[ferror_{ext}] exc return result第一個坑shutil.move遇到目標(biāo)目錄已有同名文件時Windows 上有時會直接報FileExistsError有時會靜默覆蓋——這個行為不一致非常危險。所以我在移動前先判斷目標(biāo)文件是否存在存在就改名加后綴_dup_1。第二個坑shutil.move跨盤符移動時有坑。如果源文件和目標(biāo)目錄在同一個盤符它是直接rename速度很快跨盤符時會先復(fù)制再刪除源文件但此時如果源文件是只讀屬性刪除會拋異常。這個問題我花了一個晚上才定位到最后的解決方案是跨盤符移動時先解除目標(biāo)文件的只讀屬性再刪除。5. 實戰(zhàn)中最容易踩的坑UI 卡死、路徑安全與誤操作保護(hù)5.1 主線程遍歷目錄會卡死界面單線程 Python 的 GIL 之痛我第一版做重復(fù)文件掃描時直接在按鈕回調(diào)里調(diào)用了find_duplicates()以為放個update_idletasks()就能刷新進(jìn)度條。結(jié)果一運行窗口先是白屏然后 Windows 直接彈未響應(yīng)。原因我得說透Tkinter 的事件循環(huán)是單線程的只要主線程里有一個長耗時操作比如遍歷上千個文件的目錄事件循環(huán)就被阻塞界面就不能重繪、不能響應(yīng)點擊于是系統(tǒng)就判定程序未響應(yīng)。Python 的 GIL 在這里不背鍋——文件操作是 IO 密集型的就算有 GIL多線程也能大幅提升體驗因為線程在等待 IO 時會釋放 GIL。解決方案是用一個獨立的工作線程做掃描通過隊列把結(jié)果傳回主線程。我用queue.Queue來做線程間通信主線程定期用after()讀取隊列刷新界面import threading import queue from pathlib import Path class ScannWorker(threading.Thread): def __init__(self, root: Path, result_queue: queue.Queue): super().__init__(daemonTrue) self.root root self.queue result_queue def run(self): for p in self.root.rglob(*): if not p.is_file(): continue self.queue.put((item, p)) self.queue.put((done, None)) def start_scan(): q queue.Queue() t ScannWorker(selected_path, q) t.start() poll_scan_queue(q) def poll_scan_queue(q): try: while True: kind, data q.get_nowait() if kind item: # 更新列表這里只做 UI 更新不做文件 IO file_list.insert(, end, values(data.name, ...)) elif kind done: progress_dialog.destroy() return except queue.Empty: pass root.after(50, poll_scan_queue, q) # 50ms 輪詢一次關(guān)鍵點工作線程只負(fù)責(zé)把文件信息放進(jìn)隊列絕對不碰任何 Tkinter 控件主線程只負(fù)責(zé)從隊列取數(shù)據(jù)并且更新界面。這個規(guī)矩我吃了好幾次虧才記住——任何 Tkinter 控件的操作必須在主線程做否則輕則界面閃退重則程序崩潰。5.2 路徑安全三連特殊字符、權(quán)限不足、超長路徑做文件管理工具路徑安全是躲不開的。第一個坑是文件名里有特殊字符——空格、#、[、]這些。如果你用字符串拼接路徑再傳給系統(tǒng)命令那很容易出問題但用pathlib.Path就完全不用操心因為它是對象化操作不涉及字符串拼接的轉(zhuǎn)義問題。第二個坑是權(quán)限不足。訪問 Windows 的C:\System Volume Information或者 macOS 的/System目錄時直接遍歷會拋PermissionError。我在所有遍歷邏輯里都加了try...except PermissionError: continue并且旁邊的界面要有提示不能靜默跳過否則用戶還以為軟件壞了。第三個坑是超長路徑。Windows 的路徑最長是 260 個字符MAX_PATH有些素材目錄很深一疊就超過這個限制。Python 3.6 之后如果你在代碼里加上\\?\前綴或者用os.path的方式仍然會撞上系統(tǒng)限制。真正穩(wěn)妥的做法是給Path對象啟用長路徑支持但最省事的是在打包時給應(yīng)用清單里聲明longPathAware。這個我放在第六章打包部分一起講。5.3 誤操作保護(hù)確認(rèn)對話框、執(zhí)行預(yù)覽、后臺可中止誤操作的保護(hù)機制我用三級來做。第一級是執(zhí)行前確認(rèn)所有改文件名、移動文件的操作都要彈出一個對話框列出你將要執(zhí)行 N 條操作是否繼續(xù)。第二級是執(zhí)行前預(yù)覽批量重命名和歸檔操作都先把計劃列表展示在界面上用戶可以在列表里預(yù)覽源文件 → 目標(biāo)文件的一一對應(yīng)關(guān)系確認(rèn)無誤再執(zhí)行。第三級是執(zhí)行時可取消我用一個threading.Event作為取消標(biāo)志工作線程在每處理一個文件時檢查一下標(biāo)志如果收到取消信號就提前退出cancel_event threading.Event() def execute_rename_with_cancel(plan, cancel_event): for item in plan: if cancel_event.is_set(): return cancelled # 執(zhí)行重命名... return completed這套三級機制在后期幫了大忙。有一次我整理素材啟用了按擴(kuò)展名歸檔功能預(yù)覽時才發(fā)現(xiàn)原來有些文件已經(jīng)處理過第二輪了目標(biāo)文件名被改成了_copy_1之類的如果沒有預(yù)覽這層緩沖我可能就把整理過的文件又重復(fù)移動了一遍。6. 性能優(yōu)化與打包發(fā)布從能用到還能再優(yōu)化6.1 三個不起眼但效果顯著的優(yōu)化點第一個優(yōu)化點是文件列表的批量插入。Tkinter 的Treeview.insert如果一條一條插入幾千個文件會讓界面明顯卡頓。后來我把數(shù)據(jù)全部塞進(jìn)一個大列表然后做成批量插入每次插入 200 行CHUNK_SIZE 200 def bulk_insert(file_list, entries): for i in range(0, len(entries), CHUNK_SIZE): chunk entries[i:iCHUNK_SIZE] file_list.insert(, end, valueschunk) file_list.see(file_list.get_children()[-1]) # 滾動到最后一行 root.update_idletasks() # 強制界面刷新第二個優(yōu)化點是文件掃描時的流式處理配合生成器。find_duplicates第一版是一次性把所有文件全都收集到內(nèi)存里遇到一個大目錄內(nèi)存占用能到 2GB。后來改成生成器形式邊掃描編處理內(nèi)存峰值直接降到 200MB 以下這個在大文件場景下很關(guān)鍵。第三個優(yōu)化點是哈希計算的 chunk size。我測試過 4KB、16KB、64KB、1MB 不同大小64KB 在這個場景下性價比最高既能利用文件系統(tǒng)的塊大小又不會讓單次內(nèi)存分配過大。6.2 PyInstaller 打包從命令行到雙擊即用開發(fā)完成后我決定打包成雙擊就能跑的可執(zhí)行文件不然還要讓用戶安 Python 環(huán)境門檻太高。打包命令很簡單但有個大坑pyinstaller --noconfirm --onedir --windowed --name FileManager app.py我用的是--onedir而不是--onefile原因有兩個一是 onefile 模式每次啟動都要解壓到臨時目錄啟動速度慢幾秒二是 onedir 模式排錯方便——用戶反饋程序打不開時我能直接看目錄里的日志和依賴文件。但這個坑讓我足足頭疼了兩個小時--windowed模式下程序里任何print()都不會顯示到控制臺而我的異常處理代碼里一堆print(exc)其實都是把調(diào)試信息打到看不見的地方去了。后來我改成把日志寫到文件里出問題時直接看app.log效率高多了。打包完成后我把dist/FileManager整個目錄壓縮成 zip 發(fā)給朋友用結(jié)果他反饋打不開報錯信息是缺少tcl86t.dll。這個問題的根源是我用系統(tǒng)自帶的 Python 環(huán)境打包而那個環(huán)境里 Tkinter 是用微軟 MSI 裝的DLL 路徑注冊到了 Windows 注冊表PyInstaller 在打包時沒能正確識別到它。解決辦法我記在這里打包前用官方 python.org 的安裝包重新裝一個干凈的 Python 環(huán)境再 pip install pyinstaller再打包這樣 Tcl/Tk 的動態(tài)庫就能準(zhǔn)確被打進(jìn)去。重裝后打包跑一遍同樣的操作成功。6.3 長路徑支持與圖標(biāo)資源前面說的MAX_PATH問題我在打包清單里加了長路徑聲明。方法是在工程根目錄放一個app.manifest然后用--manifest app.manifest參數(shù)打包?xml version1.0 encodingUTF-8 standaloneyes? assembly xmlnsurn:schemas-microsoft-com:asm.v1 manifestVersion1.0 application xmlnsurn:schemas-microsoft-com:asm.v3 windowsSettings longPathAware xmlnshttp://schemas.microsoft.com/SMI/2016/WindowsSettingstrue/longPathAware /windowsSettings /application /assembly打包命令變成pyinstaller --manifest app.manifest --iconicon.ico ...。不過這個東西在打包后是否真正生效不同 Windows 版本表現(xiàn)不一致我建議在代碼里再做一層保險對超長路徑用\\?\前綴調(diào)用系統(tǒng) APIPython 的ctypes可以做到但這個涉及系統(tǒng)底層不在第一版范圍內(nèi)我把它列進(jìn)了 v2 的改進(jìn)清單里。7. 寫在最后的一點實際體會整套流程跑完之后我最大的感受是寫一個桌面文件管理工具真正難的不是寫代碼而是把事情想清楚。把需求拆到能落地選定幾個核心功能然后果斷砍掉非核心的部分設(shè)計好分層讓 UI 和邏輯互相不拖累然后在最容易出錯的重命名、移動、覆蓋這些操作上做好預(yù)覽和撤銷——這些事情比敲代碼本身花的時間更多但直接決定了工具好不好用。我特意把這個項目的源碼按模塊整理好了每個模塊可以獨立運行、獨立測試。如果你也想從零做一個 Python 桌面工具我的建議是先拿這個項目練手把架構(gòu)看懂然后把models里的邏輯改造成你自己的需求——比如你在做的可能就是管理圖片素材、清理重復(fù)下載、整理音樂庫那核心邏輯完全通用只要把規(guī)則改一改就能用。動手做一次比你翻十篇教程都管用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美精品99久久久**| 久久伊人在线五区| 久久免费精品视频免一| AA特级绝黄| 国产精品久久久蜜臀| 国产AV精久久| 丁香九月婷婷| 99色在线| 天天天天天天天天综合| 久久极品伊人| 精品国产精品一区二区| 伊人网青青| 亚洲综合草草| 丁香婷婷激情五月天无毒不卡 | 国产精品久久久久久高清无码免费看 | 超碰中文字幕人妻草一区| 国产男女无套视频免费观看| 中文字幕日韩人妻视频一区二区三区 | 老熟乱一区二区三区四区| 美女97超碰| 欧美在线播放aaaa| 乱伦3P视频| 日韩黄片视频试看| 青娱乐999| 91精品久久久久| 国产视频第2页| 日本操BAV| 97在线免费观看| 蜜桃精品一区二区三区久在线| 丁香六月激情综合| 日本肉体xxxx裸交| 国产精品免费视频人成| 伦伦成年午夜免费视频| 国产高清成人传媒影视| 国产真实野战在线视频| 欧美丝袜制服久久| 亚洲 欧美 手机在线观看| 一级特级aaaa毛片免费观看| 色欲天天综合网| 国产免a费看黄片在线| 东京热一区二区中文字幕| 人人妻人人色一区二区三区| 中文字幕精品亚洲熟女| 亚洲图片欧美| 国产成人无码啪| 91AV入口| 脫衣舞一区二区三区| 91人妻最真实刺激绿帽| www.91理论| 亚洲国产精品无码AV久久久| 91ise欧美| 自偷自拍的亚洲视频| 97人人干| 中文字幕91综合| 偷拍网站久久男女男| 大稥蕉免费视频这里只有精品| 一本道综合色图| 日韩欧美女优电影| 亚码人妻| 人妻少妇无码 | 国产91 丝袜在线播放 | 男人天堂电影院| 97碰| 思思热久久成人| 免费看黄视频亚洲网站| 啪啪啪综合网| 日韩精品高清资源在线| 天天92av| 国产一区二区在线播放量| 国产成人自拍视频视频| 女人高潮大叫一级毛片| 日韩99999色| 亚洲男人天堂2| 欧美少妇高潮视频| 免费日韩黄片| 青青草中文-久久青草精品一区二区三| 九九久久久| 26UUU欧美日本| 日本三级韩三级99久久| 中文字幕av久久爽Av| 日韩精品99久久久久久中文字幕| 欧美人妻另类在线| 亚洲无无码αⅴ每日更新| 太久视频| 抽查国产福利主播| 日韩本不卡视频在线观看| 精品天堂| 激情视屏国产乱伦强奸| 人妻少妇色综合| 国产97色在线| 久久毛卡| 午夜后入| 一区不卡在线观看av| JULIA一区二区三区在线播放| 欧美九九爱| 91AV天美在线视频| 亚欧成人综合影院| 操国产高清| 欧美黄色片在线播放| 久久性视频| 秋霞一区二区三区四区五区六区七区| 97日亚洲欧美| 天天干天天插| 人人妻人人爽一区二区三区| 免费看久久久性性| 日韩无码第3页| 日韩Va亚洲va欧美Ⅴa久久| 日韩亚洲美女一区久久| 十八禁啪啪视频| 丁香色五月 97干| 裸体美女久久久| 26uuu成人影片| 丁香五月性爱| 欧美色91| 亚洲欧美大香蕉| 91劲爆| 日韩中文字幕国产| 日han少妇无码| 色欧美在线| 手机在线A片| 国产白领连续中出在线观看| 国产精品久久久久久照片| 天天综合91在线| 女人香蕉久久毛毛片精品| AV一区观看| 亚洲另类久操网| 亚洲超碰97| 超碰超碰欧美| 亚洲精品啪视频| 人人澡综合涩| 在线A日本| 97色诱| 国产欧美在线观看免费观看| 91嫩草欧美| 超碰在线观看av不卡| 亚洲永久AV无码精品秋霞| 永久免费观看的毛片的网站| 99在线观看无大码| 99亚洲精品| 亚洲AV无码天美传媒一区| juliaann丝袜| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 乳欲人妻办公室奶水| 久久AV无码1区2区3区| 国产精品不卡一区二区三区av| 欧美一区二区情色| 免费少妇一区二区| 青青草国产一区二区三区| 少妇高潮对白在线观看| 四虎av在线| 五月婷婷激情综合| 天天看天天日天天操| 青青青国产| 最新亚洲人成网站在线影院| 97国产精品一区| 超碰超碰95| 日熟女| 新精精品久久精品| 五月婷婷六月丁香| 东京热一区二区中文字幕| 天天摸夜夜操视频| 啊…啊…操我用力操我| 蜜乳AV.COM| 欧美日韩一二三| 800zy一区二区| 欧美日韩国产中文精品字幕自在自线 | 综合 亚洲 欧美| 英伦大奶子熟妇吊带| 国产成人自拍视频视频| 伊人宅男大香蕉| 国产专区路线| 99日韩| 麻豆国产精品午夜视频| 91天天综合在线观看| 99热综合在线| 亚洲九区| 国产亚洲色婷婷久久99精品91| 国产精品不卡高清在线观看| 国产精品日日摸天天碰| 亚洲成人色情五月天丁香花| 色综合天天| 一起草欧美| 美女诱惑一区| 欧美色狠| 9999久久久| 欧美一品道| 丝袜喷水在线| 超碰97资源大奶| www.色婷婷| 一牛影视成人片免费| yiqicaoav| 国产又长又大又粗的视频| 欧美三级一级| 亚洲色吧网| 天天干天天干天天干| 亚洲成a人片在线观看中文!!!| 欧美中出| 大象AV在线| 国产欧美另类久久久精品课程| 久啪| 嗯嗯啊好大| 日韩AV中文字幕电影| 色婷婷av在线观看| 欧美色综合影院| 欧美日韩免费性爱| 国产成人自拍视频视频| 精品中文字幕第一页| 欧洲在线性爱视频| 欧美巨大性舒爽顶到了| 婷婷干黄色| 视频国产欧美在线播放| 亚洲最大的黄色电影网站。| 91女网站| 欧美国产一区二区三区麻豆传媒| 亚洲精品天天影视综合网 | 久久亚州高清| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 久久久久久久久国产| 搞中出视频在线观看| 91久热这里只有精品| 激情综合五月婷婷| 青青青操| 男人天堂 天天射| 日日干夜夜操视频h| 丰满少妇一区二区三区四区观看| 夜夜操91744565| 欧美一区二区在线资源| 手机不卡视频不卡在线一二三区 | 亚洲国产综合图区中文字幕| 日本大香蕉综合网红本杳社区| 亚洲天堂男人天堂网| 老鸭窝成人免费毛片视频| 色综合天天爱去电影网| 国产精品操| 黄色AV免费| 国产精品永久免费10000| 丰满少妇乱子伦精品无| 中文字幕jul-617人妻熟女| 色婷婷综合网| 91视频在线观看18| 婷婷五月天基地| 亚洲 综合 欧美| 欧美大码在线视频| 亚洲av夫妻操穴网| 打av高清| 91另类| 97视频网站| 精品人体无圣光凹凸| jizzjizz欧美| 中文字幕丝袜美腿| 日韩综合97P| 精品女同一区二区三区| 久久久久白虎| 免费综合亚洲中文| 欧美日韩性感| 少妇丝袜在线观看AV| 嫩草 我啊~嗯~在线| 2019亚洲男人天堂| 亚洲色图91| 日本韩国国产精品一区| 久久免费中文字幕在线观看| 蜜臀亚洲中文| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 伊人综合色网| 色香综合天天影视综合| 国内毛片欧美香蕉精品| 午夜男人一级A片7777| 欧美在线官网| AV中文字幕三四五| 精品国产人成在线| 久久精品一区二区三区不卡| 极品色电影院| 1769成人国产精品视频| 男女一级A片大黄,一进一出| 97久久精品国产| 亚洲交性| A片 AV一级在线播放观看免费| 亚洲高清91| 亚洲高清视频在线免费观看| 淫妻综合网| 亚洲欧美日韩电影网站一区 | 中文乱码字幕观看视频| 日亚韩精品视频二区三| 区一在线观看| 中日韩免费看男女操逼大全| 久久精精区一区二区一蜜桃一区二区| 精品人妻视频一区二区在线播放 | 免费A片三p视频| 亚洲无线码一区国产欧美国| 久久精品高清无码一区| 老子午夜伦不卡影院| 97爱免费插| 日韩有码中文字幕女同性恋| 欧美刺激色黄片免费看| 青青草导航在线视频| 视频二区美腿制服人妻欧美| 久久宗合亚洲| 欧美性爱十八禁| 男人 天堂 日 亚洲| 爱爱啊啊啊| 国模吧 一区二区三区| 超碰夫妻97| 亚州熟女乱伦| 一区=区三区视频| 人人操人人色网| 色色色综合| 欧美亚洲特P| 强奸乱伦动态污图免费 | 亚洲情色婷婷五月天| 久久二| 五月婷丁香| 亚洲久久久| 高清无码在线播放网站| 一区二区三区 丝袜高跟| WWW.操逼.COM| 天操天操夜操夜月操月年年操| 综合欧美亚洲| 中文字幕视频2区| 中文一区二区三区影院| 中文幕97| 亚洲色图尤物视频| 97日韩欧美亚洲| 5月婷婷6月六月丁香| 亚洲自拍青操视频| av大香蕉| 国产精品午夜AV完会免费 | 综合网亚洲1| 精品久热| 男人在线天堂| 国产中文福利| 五月婷婷综合激情| 欧美日韩资源| 久久久久久少妇| 亚洲欧美中文日韩视频中国语| 人妻熟妇一区二区三区| 亚洲青青青视频在线| 国产精品国产亚洲区艳妇糸列| 蜜臀亚洲中文| 好吊妞转入那个网| 亚洲欧洲综合av在线| 91热色| 麻豆蜜桃视频在线观看| 国产一级特黄大片处女| 变态综合色| 丰满少妇一区二区三区四区观看| 国产人伦a片信息免费片| 欧美九一精品久久久熟妇| 国产欧美第五页| αⅴ天堂| 亚洲情色综合| 欧美色综合影院| 性猛交| 国产后入清纯| 国产精品小视频一区二区三区| 草草网站影院白丝内射| 蜜臀久久99精品久久久久久-DVD原版全| 亚洲AV不卡在线观看尤物| 午夜免费视频1000| 自拍偷拍 日韩无码| 久久性爱视频免费看| 日韩二区三四区五区六区在线看| 97一区二区蜜臀| 国产精品99久久久www| 永久免费av无码网站国产app| 女人香蕉久久毛毛片精品| 欧美 青青草| 亚洲 综合 欧美| 天天操天天干一区二区 | 操逼不卡中文字幕| 国产一区二区三区高清视频| 久久精品国产亚洲粉嫩| 90后后入| 青草精品视频一日本久久久久网站| 欧洲乱码视频| 国产精品 亚洲情色| 大香蕉五月天| 国产激情久久久| 精品国产丝袜一区二区三区乱码| 国产日逼视频| 中国和日本人色哪个不下载能放| 美女91av| 天天综合欧美黑人| 天天内射| 久草精品视频| 97亚洲欧美日韩| av操操不卡| 极品五月天噜噜| 亚洲丝袜色| 色丁香五月婷婷| 亚洲熟女av日韩熟女| 一区二区三区四区免费视频| 乱伦图av| 国产91久久九九免费精品无码| 一级@啪啪视频| 欧美精品一区二区少妇免费A片| 国产美女高潮视频| 亚洲性天堂| 色欲av国内精品久久久久久| 啊啊啊啊网站| 摸奶性爱视频网站在线免费播放| 国产一区二区三区高清视频| 日本羞羞的视频在线播放 | 美女啊啊啊啊啊啊啊| 熟女性视频| 久久女人一区二区三区| 麻豆区99999| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 天堂中文资源在线bt| 欧美αv.com| 欧美亚洲尤物久久| 日本福利二区视频| 国产suv精品一区二区四区999| www.97在线| 9久精品视频在线观看| 大屁股熟女一区二区三区| 四虎在线观看网站| 97天天摸天天爽| 亚洲最新Av| 国产欧美一级在线观看| 久99热| 人人澡人人爽人人精品| 午夜小电影在线插入淫高潮| 97爱| 伊人一区二区在线播放| 免费超碰97在线观看| 粉嫩av在线一区二区| 韩国黄片aaaa| 蜜臀少妇一区二区| 久草精品一区| 人妻少妇精品视频一区二区三区| 日韩欧美成人综合在线| 5月婷婷6月六月丁香| 怡红院久久老司机| 国产熟女精品区| 亚洲天堂一二| av爱爱爱| 日本91白丝| 裸体1区| 大香蕉懂9| 大学生口爆吞精| 女人高潮抽搐喷水视频网站| 综合干干干av久久久综合网| 久久久无码精品人妻二区| 91free福利| 91网站18在线| 97爱综合| 婷婷色色网| 热久久九九热| 综合网天天| 色爱国产| 校园春色亚洲无码| 澳门黄片一香蕉视频| 亚洲操逼无码| 日韩精品操少妇| 婷婷丁香六月天| 亚洲欧美人妻| 五月丁香色综合| 91欧美情色| 特级毛片特黄久久免费看| 蜜桃传媒视频第一区入口在线看| 日韩偷拍色图| 亚洲欧美色图小说| 一个人在线看的黄色电影网站| 日本高清一区二区在线| 草草影院最新网址| 97色在线视频| 欧美色图另类图片| 狠狠做深爱婷婷久久二区| 欧洲综合视频| 丁香激情网| 丁香五月性| 天美麻花大全视频| 92人人操人人| 色操逼网| 97自拍一区| 777AV电影| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 亚洲成人网站在线观看| 中出20p| 26uuu最新| 久久久一级| 色汉综合| 懂色AV一区二区三区| 97干色| 色噜噜狠狠色综无码久久合欧美| 国产伊人精品在线| 啊啊啊操一区| 国产精品诱惑| 九九久久99| 日本孕妇一区二区视频操逼免费看| 欧美色图中文字幕| 日韩色欲久久一二三四区| 欧美大片天天看| 人人插人人摸人人| 色网亚洲人| 婷婷在线播放| 成 人片 黄色大片| 91无摭挡| 超碰国产在线| 12一15性XXXX粉嫩国产| 九九九九九用不成了| 美國A片| 激情文学小说一区二区| 久久秀这里有精品| 亚洲国产成人精品999| 中文字幕诱惑制服人妻丝袜美丝袜美| 啪啪视频亚洲第一| 深夜激情| 97超碰色屌| 极品尤物自安慰| 91丝袜人妻| 91九九| 国产精品99精品视频网站| 亚洲精品人伦一区二区| 激情六月天| 国产精品点击进入在线影院| 欲香欲色天天天综合和网| 老熟女熟妇| 婷婷丁香九月| 蜜臀AV一区二区三区| 在线观看十八禁| 日本 色 导航| 五月天婷婷社区| 日韩中文字幕av在线播放| 国产激情综合五月久久| 操操操五月天婷婷丁香影院| 亚洲少妇视频| 欧亚揄拍偷拍精品视频| 在线啊啊啊啊| 色婷婷亚洲婷婷| 91大神精品长腿在线观看网站| 欧美日韩亚洲少妇寂寞影院正在播放 | 精品久一区免费| 欧美少妇性爱网站| 欧美性爽xyxOOOO| 91精品又粗又猛又爽| 有码免费观看| 中文字幕中文字幕一区二区| 边做饭边操逼逼| 97色操| 免费9 1久久| 成人短视频在线观看| 操逼逼中文字幕| 久久香蕉国产线看观看亚洲女人 | 91在线精品| 欧美视频一| 色九久| 激情情色五月天| 亚洲精品1区| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 9久热这里只有精品| 欧美综合色综合| 综合久欧洲| 9热9热综合网| 男人天堂站| 尹人大香蕉视频在线| 亚洲国产无码精品首页久久久| 欧美人与动性人交a| 91丝袜在线观看| 久 久无码人妻AV| 久久成人东京热人妻| 熟妇无码视频三区| 国产夫妻性生活视频| 蜜桃视频啊啊啊啊| 日本最新1区2区3区| 亚洲欧美一区二区不卡视频播放| 久久久久久久久久黄色网| 91精品成人| 久久久久久久久久久97| 国产一级久久久| 国内黄色精品| 亚洲视频小说| 四虎在线免费视频| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 亚洲97在线| 久久久91| 69国产对白刺激| 日本人妻中文字幕 | 中文字幕AV片| 91模特在线观看| 亚洲图片视频小说| 精品视频在线观看| 被窝影院午夜看片无码| 美女尤物人人操| 国产高清无码一区二区三区四区皇冠| 五月天玖玖资源站| 天天欧美欧美亚洲网| 久热69九色熟妇97| 嗯嗯啊好大| 91欧美丝袜| 熟妇无码视频三区| 国产乱伦视频污| 亚洲色 国产 欧美 日韩| 日韩一级成人毛片免费观看 | 亚洲天堂电影网99999| 精品视频一区二区| TS人妖另类精品视频系列| 人人搞人人插人人操| 色网在线视频观看免费| 麻豆这里只有精品| 冬京热男人的天堂| 大干人妻| 白丝在线一区| 一区二区高清视频| 郑州宾馆老熟女露脸啪啪| 久久久久国产无av| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 亚洲97综| 日韩在线欧美精品一区二区| 最新av中文字幕高清| 美女天天干| 亚洲av综合色区无码一| 精品久久久久久亚洲| 色欲人妻一区二区在线| 久久久999国产| 无码区蜜乳| 人人人人人人少妇| 人妻内射一区二区在线视频| 视频不卡中文字幕| 日韩激情无码影院| 大香樵伊人网| 人妻天天爽夜夜爽2| 国内外内射高清视频| 人人操人人狠狠操| 成人性爱高清视频免费看| 久久精品国产亚洲AV嘿嘿| 91粉芽高清在线一区二区 | 日本精品五区| 综合激情五月天| 欧美精品双插| 成年无码动漫av片无尽在线| 91色久| 性老妇一区二区三区| 九九九九九九视频免费| 日本福利社| 操逼短片| 日韩丰满熟妇| 中文字幕十五区| 日韩性爱小视频| 欧美性特| 国产日本顶级一区二区三区| 欧美成人黄网色网站| 裸体1区| 激情熟女12P| 高树玛利亚无码流出| 男人天堂新在线| 免费综合亚洲中文| 91 国产丝袜在线播放-百度| 欧美少妇性乱| 在线免费观看高清无码视频| 日韩九区| 欧美色图亚洲色,麻豆| 在线视频免费播放一区| 欧洲亚洲人妻无码中字久久三区四区 | 丰满美女一级毛片在线播放| 国产免费大片| 一级乱伦网站| 日本不卡三级网在线播放| www.av家庭乱伦| 国产一区二区三区中文字幕| 婷婷五月天激情四射| 超碰三级秋霞| 少妇久久久久久| 欧美色图天堂网m| 中文字幕一区二区三区字幕| 免费人人搞97| 日韩欧美中文日韩欧美色| 视频黄站| 日本韩欧美在线播放a| 快播久久人人aV| 亚洲AV成人无码一区二区三区在线观看| 精久久久| 亚洲丝袜二区| 97超碰人妻| 韩国三级三级BD在线| 国内毛片婷婷六月色| 亚洲视频二区 | 男人的天堂va在线| 久都青青视频 | 九九九九九九九九九九精品视频| 国产欧美精选自拍一区| 人妻喷水| 亚洲AV无码天美传媒一区| 国产精品电影大全| 青青伊人加勒比海| www.色婷婷.com| 亚洲精品九九九| 丰满精品人妻少妇久久字幕| 户外裸露刺激视频第一区| 亚洲校园激情| 麻豆黄色五月天| 一本精品日本在线视频精品| 亚洲国产精品无码AV在线| 女同性恋中文字幕| 九月婷婷综合| 最新岛国大片| 欧美日韩亚洲天堂| 色婷婷综合久久久久中文一区二区| 91久久精品中文字幕| 91亚洲情色| 色鬼在线综合| 人妻熟女av国产网站| 秋霞免费无码视频日韩A片| 欧美日韩亚洲五月天婷婷| 99色色网| 亚欧视频在线| 九九九九AV| 色香综合天天影视综合 | 国产偷人伦激情在线观看| 亚洲天堂第一页| 人人操人人操人人操人人操人人操人人人11.CM| 影音资源男人日韩| 久久婷婷五月天| 国产在线强奸视频| 99久久久无码国产精品性啊聊| 激情视频一二三| 亚洲精品一区二区三区新线路| 国产精品自在线发布| 91色插| 大乔未久88一区| 少妇天堂网络| 深夜操逼网| 第一高清av中文字幕| 日韩精品碰碰| 狠狠操狠狠操操| 少妇淫妇久久久久久久| 超碰欧美97资源| 男人的天堂欧美| 人人妻人人操人人乐| 狠狠狠狠狠狠| 美女操逼福利视频| 日本女优在线视频福利| 国产性久久久| 日日干天天干夜夜爽| 久久精品一区二区| 九久精品| 精品人妻一区二区三区四区| 日韩在线观看AV| 久久9免费视频| 一二三四视频在线社区中文字幕| 少妇500双飞99| 欧美亚洲影视| 天天操女人| 国产11页| 国产在线76页| 伊人91| 精品超碰中文在线| 国产伦精品免编号公布| 97精品综合| 中文字幕在线免费观看视频| 亚洲中文字幕精品久久久久久直播| 在线免费观看日韩一区| 亚洲无吗在线视频| A 在线网址| 国产强奸91| 国产精品久久久久久久黄无码 | 岛国在线一区二区三区| 一级特级aaaa毛片免费观看| 在线人人人人人人精品超| 老熟妇乱轮| 久久黄片国产一区二区| 性在久久久久久| 国产成人无码高清| 去干网最新版| 2020中文字幕| 午夜精品久久久99| 国产日韩久久| 日日夜夜精品视频| 亚洲精品乱码线路中文字幕 | 91人人看| 蜜臀精品1区2区| 久久婷婷在线观看视频| 91高潮喷水美女| 射丝袜高跟鞋99| 亚洲国成人情色好看电影| 日韩一级二级三级免费看完整版国语版 | 天天摸,夜夜摸| 日本午夜福利视频| 亚欧洲一区二区视频| 97视频在线观看网站| AV天堂因数| 亚洲无码成人精品| 台湾成人无码AV| 欧美日韩99| 97 国产一区| 久久美国毛片| 天天综合~91| 永久免费av无码网站国产app| 国产精品青草综合久久| 91亚洲网站| 特色a在线上| 亚洲熟女乱色一区二区三区| 中文字幕狠狠玩| 九色 人妻 大香蕉| 久久少妇人妻| 成人电影一区| 美腿色图| 丰满人妻一区二区中文| 一级乱伦网站| 午夜男女爽爽爽在线视频| 综合网欧美在线| 麻豆天美制片厂网站视频| 道久久五香丁月婷婷激情综合| 91爱看| 91综合网| 亚洲色色探花| 亚洲最大的黄色电影网站。 | 亚洲男人电影天堂| 浪人综合网| 国产高清1234区| 黄色成年| 日韩成人性爱电影在线播放| 国产成人资源| 欧美激情精品久久久久久| 无码精品久久久天天影视| 天天干天天插| 久久久精品久久| 日韩免费在线视频观看| 日日天天久久啊啊aaa| 天操天操夜操夜月月年年操操| 国产在线观看一区二区三区| 成人欧美一区二区三区黑人一| 天天天天天天天天综合| 四虎国产精品永久在线囯在线 | 嫩草影院永久在线制服丝袜| 亚洲国产另类在线中文| 丁香激情五月| 91日日夜夜| 黄色AAAAA欧美| 成人热久久精品| 青春草莓视频在线观看网址| 国产女人成人精品视频| 亚洲AV不卡在线观看| 丰满人妻一区二区三区四区| 午夜超碰| 中国亚洲呦女专区| 综合网亚洲1| 黄片不用下载在线观看| 欧美激情久| 亚洲啪啪视频免费| 精品无人区麻豆乱码久久久| 91骚熟女| 成人AV素股で擦久久| 久久久啊啊啊| 99色色网| 亚州欧美另类| 91狠| 老司机福利青青草| 大香蕉碰| 亚洲欧美综合| 亚洲另类久操网| 一区二区乱码福利| 97中文超碰| 无码直播久久久| 亚洲情色一区二区三区| 久久人人舔人人爽舔人人av片| 久操在97| 翔田千里无码中出中文字幕| 超碰久久草| 黄色高清无码无码破解免费暗网| 日韩不卡网操逼中文字幕日韩| 国产最火爆久久国产网站网站| 少妇内射www在线观看视频| 黄色AAAAAAAAAAA大片| 中文字暮97| 蜜乳AV.COM| 亚州五月| 青娱乐av在线| 人人操人人摸avav| 国产精品久久久久久久免牛肉蒲团 | 青娱乐国产盛宴视频| 久久精品电影| 农村妇女一级二级三级视频| 久久久不卡| 青青操少妇| 国产人妻天天干精品| yazhououmeizongya| 九九热精品| av毛片aaaaa免费看| 在线观看午夜婷婷久久久久清性观看| 99性爱在线观看| 欧洲综合色| 亚洲宗合电影| 欧美婷婷五月天| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 九色黄站| 91欧美性| 五月色网| 91影库| 蜜桃香蕉久草精品在线| 亚洲熟妇乱女区二区三区| 91这里只有精品| 国产亚洲日本| 1956日韩精品| 欧美亚洲中文字幕| 最近2018中文字幕在线高清第一页| 爱妃国产亚洲视频中文字幕| 60秒免费视频| 成人无码专区精品视频| 无码日韩网站| 91人妻人人澡人人爽人人精品| 精品无码人妻一区二区免费蜜桃| 99热在线播放| 成人毛片免费| 亚洲午夜精品久久久中文影院| 久久不卡一区二区| 国产做?爰片久久毛片?片美国| 精品久久久久久久| 舔人妻中文免费视频| 亚洲 中文 女同| 秋霞一级视频在线观看免费| 精品久久久av无码免费| 国产乱码久久久| 桃色六月天| 欧美劲爆视频一区二区| 人人玩人人添人人澡免费| 丰满人妻一区二区三区色-百度| 在线视频一区二区传媒| www五月| 999国产精品999| 国产熟女免费观看久久| 精品成人无码| 91丝袜在线观看| 91日韩国产欧美亚洲另类精盘州至城都| 色偷偷男人的天堂麻豆| 神马影院午夜福利久久久| 国产欧美日韩女同性恋ww喷水精品 | 在线看片国产精品每日更新| 久久精品国产亚洲AV先锋| 中文字幕三四五区| 密臀在线视频| 呻吟 欧美 日本 中出| 欧美日韩一干二干| 欧亚久久偷拍视频| 欧美在线啊啊啊 | 欧美日韩天堂| 91欧美综合在线| 国产精品在线网站| 神马久久久久久久久久久久| 少妇蜜汁| 久久久av爱| 天天夜夜久久| 75大香蕉| 无码免费一区二区三区啪啪| 黑操B| 95精品在线| 亚洲欧美精品一区天堂久久 | 蜜臀一区二区三区在线| 欧美色999| 午夜精品久久久久久久久久久久久 | 一区AV| 黑人在线91| 成人自拍三级在线观看| 91亚洲人| 97干97色| 青娱乐福利99| 成人AV超碰免费在线| 国产成人无码啪| 中文字幕国产| A 天堂在线观看视频| 亚洲精品一二牛牛| 无码高清少妇久久| 国产乱伦亚洲| 人人考人人摸人人干| 五月天激情婷婷| 国产吞精a级片激情电影| www网站黄| 91oumei| 久久精品视频28| 国产熟女高潮一区二区三区| 熟女自慰久久久| 色天堂在线观看| 精品人妻一区二区三区视频在线| 啊啊啊啊啊在线| 亚洲清纯综合| 女人综合网| 久久久久久亚洲中文| 国产免费一区在线观看| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 日韩精品资源| 精品欧美日韩在线观看| 成人国产二区三区在线,男女精品。| 欧美日韩制服| 人妻啪| 色噜噜狠狠色综无码久久合欧美| 白嫩国模丰满一二三区| 日韩人妻 中文字幕| 黄片色区软件| 99色在线视频| 人人污日韩一区二区| 亚洲男人天堂视频| 久久久新亚洲AV| 乱伦图一区| 午夜丁香| 日日夜夜骚| 一卡二卡三卡| 看大黄色大片原件| 亚州免费啪啪视频| 另类在线| 视频一区二区三区精品| 女人被添高潮免费视频| 欧美狠狠操| 日本三级韩国三级美三级91| 天美精品原创av片国产| 中国大陆国产高清AⅤ毛片| 国产亚州高清国产拍精| 亚州精人品大香蕉| 综合视频91| 99在线精品观看视频中文| 一区AV| 日韩美女啪啪一区| 在线播放成人网站| 少妇内射www在线观看视频| 久久久久久97| 国产Av超碰| 日本淫色网| 亚洲人妻爽爽爽| 一区二区三区精品久久| 欧亚第一综合网| 亚洲综合20p| 26uuu国产免费观看| 91挑色欧美| 日韩视频精品在线观看| 另类图片五月天| 热热色综合网| 性色av蜜臀av色欲aV| 91美女视屏| 啊啊啊啊啊啊好多水| 蜜臀视频网站| 综合一区中亚洲国产成人综合精品 | 日本人妻一区二区| 午夜福利区| 人人干黄色| 国产无遮挡| 超碰在线一区二区三区| 99综合| 91模特在线观看| 欧美特大黄一级片片免费| 国产精品久久久久999| 日本精品网站在线中文| 天综合网| 日本欧美不卡| 啊啊啊好爽快点啊啊啊嗯嗯| 色吊丝 日日骚 清纯唯美| 五月婷久久| 欧美 亚洲 另类 综合| 成人av性爱电影在线观看| 射丝袜高跟鞋99| 明星性猛交ⅹxxx乱大交| 97视频观看| 亚洲一区二区在线观看91| 欧美在线官网| 国产婷婷综合在线观看| 人人色人人射人人妻| 国产老太乱伦一区| 欧美中文字幕一区 | 东京太热男人的天堂久久久| 亚洲欧美国产成人综合不卡| 91男女| 9久超碰| a片久久久久久久久久久久 | 日韩操人| 国产精品久久久久久久久久久久久久吹 | 太久视频| 91综合天天| 欧美大香蕉卡久久| 日本色色色网站免费看不卡| 红桃视频高潮| 男人的天堂午夜av| 久久久久久裸体| 午夜天堂精品久久久久91| 日本操逼视频免费| 性欧美另类高清| 国产黄色视频久久| 亚洲高清少妇| 五月天激情小说| AV天堂国产| 1024久久高清视频| 亚洲啪啪视频免费| 精品人妻一二三四区视频| 欧美在线播放| 91久久久久久久久18| 麻豆 欧美 日韩| 国产欧美日韩一区二区三区| 国产av又色又爽又黄| 久久91| 日韩精品操少妇| 最新日韩黄片| 亚洲视频精选| 欧美日韩人人精品| 91操人| 国产乱子伦久久精品综合一区二区三| 欧美另类自拍 | 一区二区三区精品视频| 欧美黑人与女人91| 婷婷五月综合激情| 一个色导综合| 51一区二区三区| 日本99视频| 日韩精品一区二区高清| 91欧美巨乳| 人人爽夜夜操| 丁香五月激情婷婷| 另类亚洲一区二区三区| 伊人欧美大香蕉视频| 制服少妇欧美| 插穴性爱视频在线观看| 国产性爱强奸乱伦大全| 欧美一品道| 国产一级久久久| AA丁香综合激情| 思思热影视| 天堂69亚洲精品中文字| 色天天野狼综合社区| 一区二区三区四区久久视1| 992这里有精品| 日本高清一区二区在线| 搞中出久久| 97超碰伊人| 久久久久久久久九九久孕交| 欧美亚洲综合色| 亚洲欧美精品福利在线| 精品成人动漫一区二区| 日本成熟少妇A∨网站| 久久有码视频| 黄色一区三区| 吉田爱美AV在线| 青青草九九九九九| 免费视频无码| 91精品无码人妻系列| 亚洲综合另类小说色区亚洲成av人片在www | 国产91丝袜 在线播放| 美女诱惑1区2区| 九九色色| 免费精品99| 97人人操人人干| 91精品黄在线观看| 无码免费精品高清| 中字幕人妻一区二区三区| 亚洲国产熟妇综合色专区| 夜夜夜夜久久久久| 色色97爱| 日本男人天堂| 一直超碰| 国产AV天美| 五十路熟女工口 | 农村少妇久久久久久久| 欧美色老汉| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 中文字幕神马久久| 九区国产| 天美传媒Av在线| 色臀aV| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 国产97视频免费观看| 日本潮催一卡操| 国产精品又黄又猛又粗| 久久精品国产亚洲5555| 好色综合| 天天草天天日|