久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

Python文件操作:os、pathlib與shutil的分工與實戰(zhàn)指南

Python文件操作:os、pathlib與shutil的分工與實戰(zhàn)指南 說實話很多人學(xué)了Python基礎(chǔ)語法之后第一個感覺自己會寫腳本了的時刻往往就是從文件操作開始的——批量改名、整理下載目錄、按日期歸檔日志。但也是從這一刻開始才真正體會到Python文檔里那三個庫的分家有多讓人迷惑操作文件用os處理路徑用os.path高級復(fù)制刪除又跳出來一個shutil到了Python 3.4之后還得加上pathlib。剛上手的時候我也是一頓混用同一個腳本里同時出現(xiàn)os.path.join和Path的情況比比皆是。這個主題看起來基礎(chǔ)實際上是幾乎所有自動化腳本的地基。如果你能把os、pathlib、shutil這三者的分工和配合摸透后面寫爬蟲存數(shù)據(jù)、寫數(shù)據(jù)處理腳本、寫自動部署工具都會非常順手。這篇文章我會直接按實際開發(fā)場景來拆不按文檔順序念重點講那些文檔里沒寫清楚、但你在真實工程里一定會撞上的問題。1. 三個庫三個脾氣先分清os、pathlib和shutil誰負(fù)責(zé)哪攤活1.1 剛上手時最容易犯的錯把所有文件操作都塞進(jìn)os里os模塊是Python和操作系統(tǒng)交互的最底層接口它的定位非常廣環(huán)境變量、進(jìn)程管理、工作目錄、文件描述符什么都有。正因為它什么都管你直接用os去操作文件時寫出來的代碼往往很啰嗦。比如判斷一個路徑是不是文件、再拿到它的文件名最傳統(tǒng)的寫法是import os path /home/user/project/data/report_2024.csv if os.path.isfile(path): filename os.path.basename(path) dirname os.path.dirname(path) name, ext os.path.splitext(filename)這套API是早年C語言風(fēng)格的延續(xù)函數(shù)式、參數(shù)是字符串、返回也是字符串。你拼接路徑時得用os.path.join而且拼完之后得到的還是字符串后續(xù)想再取父目錄、改后綴名又得再調(diào)一層函數(shù)。邏輯一旦復(fù)雜起來滿屏的os.path.xxx嵌套讀起來非常累。1.2 pathlib的面向?qū)ο蟮降赘纳屏耸裁礀|西pathlib在Python 3.4引入它的核心思路很簡單把路徑從字符串升級成對象。路徑不再是你要反復(fù)解析的原材料而是一個有方法、有屬性的實體。同樣是上面那段邏輯用pathlib寫是這樣from pathlib import Path path Path(/home/user/project/data/report_2024.csv) if path.is_file(): filename path.name dirname path.parent name path.stem ext path.suffix一眼就能看出差別path.name、path.parent、path.stem、path.suffix都是屬性不需要函數(shù)套函數(shù)。更關(guān)鍵的是Path對象重載了/運算符拼接路徑可以寫成data_dir Path(project) / data / report_2024.csv這比os.path.join(project, data, report_2024.csv)直觀得多。而且Path對象在Windows和Linux上都能正確處理分隔符你不需要關(guān)心當(dāng)前系統(tǒng)是反斜杠還是正斜杠。1.3 shutil是真正干重活的那個os負(fù)責(zé)指出文件在哪、是什么pathlib負(fù)責(zé)優(yōu)雅地描述路徑而真正執(zhí)行把文件從一個地方搬到另一個地方把整個目錄樹復(fù)制走刪除整個目錄這類重體力活的是shutil。它全稱是shell utilities設(shè)計目標(biāo)就是補(bǔ)齊os模塊在文件級操作上的短板。舉幾個最常見的對比操作os系列shutil刪除單個文件os.remove(path)os.remove本身夠了刪除非空目錄os.rmdir只支持空目錄shutil.rmtree可以遞歸刪除復(fù)制單個文件os.system(cp ...)這種不推薦shutil.copy2(src, dst)復(fù)制整個目錄樹基本要自己寫遞歸shutil.copytree(src, dst)移動文件os.rename跨目錄經(jīng)常報錯shutil.move(src, dst)用多了你就會發(fā)現(xiàn)凡是涉及目錄樹級別或者跨文件系統(tǒng)的操作直接找shutil準(zhǔn)沒錯。它內(nèi)部已經(jīng)把很多邊緣情況處理好了比如跨設(shè)備移動會先復(fù)制再刪除不會像os.rename那樣直接拋OSError。1.4 為什么現(xiàn)在新代碼推薦你用pathlib而不是os.pathpathlib是Python 3.6以后官方文檔推薦的首選路徑處理方式原因不只是語法好看。它在設(shè)計上解決了一個很實際的問題路徑操作的組合性。字符串方式的os.path每一步函數(shù)返回的都是一個新的字符串你沒有一個穩(wěn)定的中間載體而Path對象本身就是一個載體你可以反復(fù)基于它做.parent、.joinpath()、.with_suffix()等操作代碼流程是連續(xù)的。當(dāng)然這不代表os沒用了。你要拿環(huán)境變量、要設(shè)置進(jìn)程工作目錄、要遍歷目錄樹拿底層文件描述符還是得用它。我的習(xí)慣是路徑描述和基本判斷用pathlib系統(tǒng)級交互用os文件批量操作用shutil。2. 路徑操作是最容易翻車的地方相對路徑、當(dāng)前目錄依賴病和不同操作系統(tǒng)的分隔符2.1 剛寫腳本時都犯過的病腳本一挪地方就找不到文件很多人寫腳本時圖省事直接用相對路徑with open(data/config.json, r) as f: config json.load(f)這段代碼能不能跑通完全取決于你運行腳本時的工作目錄。如果你在項目根目錄運行data/config.json能找到但如果你用IDE的調(diào)試功能、或者注冊成定時任務(wù)、或者從別的目錄調(diào)用這個腳本Python的當(dāng)前工作目錄變了這個相對路徑就立刻失效。報錯往往是FileNotFoundError但你明明看到文件就在那里。正確的做法是基于腳本文件自身的位置來定位資源。pathlib提供了非常簡單的方法from pathlib import Path BASE_DIR Path(__file__).resolve().parent config_path BASE_DIR / data / config.json__file__是當(dāng)前腳本文件的路徑.resolve()會把相對路徑轉(zhuǎn)成絕對路徑還能解析掉..和符號鏈接。之后無論你在哪個目錄下運行這個腳本它都能找到自己旁邊的資源文件。這個習(xí)慣我從第二年開始就一直保持再也沒有被文件找不到這種低級問題坑過。2.2 相對路徑、絕對路徑和., ..這些隱藏陷阱Path(..)這類路徑看起來簡單實際使用中很容易出問題。比如你想找項目根目錄下的某個文件從子目錄往上一級兩級path Path(__file__).resolve().parent.parent / config.yaml這里連續(xù)兩個.parent取決于你的目錄層級。一旦中間目錄結(jié)構(gòu)調(diào)整這個路徑就失效了。更穩(wěn)妥的辦法是從項目根開始往下找# 假設(shè)倉庫結(jié)構(gòu)repo/src/tools/gen_report.py # 要找 repo/config.yaml ROOT Path(__file__).resolve().parent.parent # 回到repo config_path ROOT / config.yaml另一個常見問題是.resolve()和.absolute()的區(qū)別。雖然兩者絕大多數(shù)時候結(jié)果相同但.resolve()會額外解析符號鏈接和..把路徑洗成最直接的形式.absolute()則不會處理符號鏈接只是單純把相對路徑補(bǔ)全成絕對路徑。在大多數(shù)場景下直接用.resolve()更可靠。2.3 Windows路徑分隔符反斜杠那些反直覺的事Windows的路徑是用反斜杠分隔的比如C:\Users\name\Documents\file.txt。在Python字符串里反斜杠是轉(zhuǎn)義符所以你寫Windows路徑時要么寫成C:\\Users\\name要么寫原始字符串rC:\Users\name。用os.path.join或者pathlib的/運算符本質(zhì)上是讓庫去處理分隔符差異。這里有個很坑的細(xì)節(jié)你用pathlib在Windows上拼路徑時得到的Path對象打印出來默認(rèn)是反斜杠樣式但如果你把它轉(zhuǎn)成字符串傳給其他程序某些程序只認(rèn)正斜杠。一個常見的處理是path_str str(Path(data) / file.txt).replace(\\, /)還有一個更隱蔽的問題路徑中帶有空格??崭裨诖蠖鄶?shù)情況下沒問題但一旦你把路徑拼進(jìn)命令字符串比如用subprocess調(diào)用外部命令就必須加引號否則命令會斷掉。用pathlib的resolve()通常能拿到絕對路徑但在拼命令時還是得手動處理空格。2.4 中文文件名和Unicode規(guī)范化問題中文文件名在現(xiàn)代Python 3中基本沒有障礙路徑可以直接用中文字符串。但如果你處理的文件是別人上傳的文件名來源五花八門可能會出現(xiàn)Linux的UTF-8編碼和macOS的NFC/NFD規(guī)范化不一致的問題。具體表現(xiàn)是你用Path(報告.pdf)去匹配明明文件存在但if path.exists()返回False。這是因為macOS的文件系統(tǒng)用NFD分解形式存儲文件名而很多其他系統(tǒng)用NFC組合形式兩者從視覺上看一模一樣但編碼字節(jié)不同。如果你需要處理這類場景可以考慮用第三方庫unicodedata做規(guī)范化對齊或者干脆用模糊匹配。不過說實話我自己遇到最多的還是Windows共享文件夾里的中文路徑這時基本上直接用pathlib也能搞定真正麻煩的是跨系統(tǒng)共享時編碼不一致。3. 目錄遍歷與文件篩選不靠記憶寫遞歸靠這三招掃目錄3.1 os.walk是全能但啰嗦的老牌選手批量處理文件時最常做的事就是把目錄樹整個逛一遍。os.walk是Python里最傳統(tǒng)的做法它會遞歸遍歷目錄每到一個目錄都返回三個值當(dāng)前目錄路徑、子目錄列表、文件列表。經(jīng)典用法import os for root, dirs, files in os.walk(/home/user/project): for name in files: if name.endswith(.log): full_path os.path.join(root, name) print(full_path)這套寫法本身沒問題但你可以看到root、dirs、files是三組平行的數(shù)據(jù)結(jié)構(gòu)你需要自己去os.path.join拼完整路徑。遍歷過程中如果想改變dirs的值來控制要不要進(jìn)入某個子目錄也容易出錯。3.2 pathlib的glob和rglob讓遍歷變得優(yōu)雅很多pathlib自帶的glob和rglob是替代方案。我最常用的是rglob它的意思是遞歸地匹配glob模式from pathlib import Path base Path(/home/user/project) for path in base.rglob(*.log): print(path)注意rglob(*.log)匹配的是文件名以.log結(jié)尾的所有層級的文件返回的直接就是Path對象不需要手動拼接。如果想匹配任意子目錄下的特定文件還可以寫# 匹配所有子目錄下的data.txt for path in base.rglob(data.txt): pass # 匹配兩層以內(nèi)的目錄結(jié)構(gòu) for path in base.glob(*/*/*.log): pass # 匹配所有文件不管擴(kuò)展名 for path in base.rglob(*): if path.is_file(): pass3.3 glob模式里那些微妙語法*、**、?和字符集glob模式本質(zhì)上是一種簡化版的正則表達(dá)式不是完整的正則。最容易混淆的是*和***.log匹配當(dāng)前目錄下所有以.log結(jié)尾的文件*不跨目錄層級**/*.log在glob方法里可以跨層級匹配在rglob里寫**/*.log和直接寫*.log效果其實相同因為rglob本身就是遞歸的?匹配單個任意字符比如report_?.csv能匹配report_1.csv但匹配不到report_10.csv[0-9]字符集匹配比如file_[0-9].txt我個人在實際項目中更傾向于用rglob加寬泛的匹配條件然后在循環(huán)里用Path對象的屬性做二次篩選。這樣比精心編寫glob模式更易讀也更好維護(hù)。3.4 按擴(kuò)展名、修改時間、文件大小篩文件的完整套路真正篩選文件時很少只靠擴(kuò)展名一種條件。比如清理超過30天的日志文件保留最近3天的備份找出大于100MB的臨時文件。pathlib做這類組合篩選非常順手import time from pathlib import Path base Path(/var/logs) cutoff time.time() - 30 * 24 * 60 * 60 # 30天前的時間戳 for path in base.rglob(*.log): if not path.is_file(): continue mtime path.stat().st_mtime if mtime cutoff: print(f可以清理: {path}大小: {path.stat().st_size / 1024:.1f} KB)path.stat()拿到的st_mtime是最后修改時間戳st_size是字節(jié)數(shù)。如果文件很多可以按大小倒序排優(yōu)先處理大文件files [p for p in base.rglob(*) if p.is_file()] files.sort(keylambda p: p.stat().st_size, reverseTrue) for p in files[:10]: print(f{p} ({p.stat().st_size / 1024 / 1024:.2f} MB))這里要注意的是p.stat()每次都會發(fā)起一次系統(tǒng)調(diào)用如果文件列表特別長性能會明顯下降。對于幾千個文件這個量級沒什么問題但如果上百萬文件建議先os.scandir拿底層數(shù)據(jù)再篩。4. 復(fù)制、移動、重命名、刪除shutil高頻操作里的異?,F(xiàn)場4.1 拒絕訪問os error 5到底哪來的這個錯誤基本是Windows環(huán)境專屬但它出現(xiàn)的原因五花八門。最常見的是目標(biāo)文件被另一個進(jìn)程鎖住了。比如你用Excel打開了某個xlsx文件然后腳本要去覆蓋它Windows會直接拒絕報PermissionError: [Errno 13] Permission denied有時候錯誤信息里會帶os error 5。Linux下對應(yīng)的是權(quán)限位不足但Windows下更多是文件占用。還有一種情況是目標(biāo)目錄沒有寫權(quán)限。比如把文件復(fù)制到C:\Program Files這種系統(tǒng)受保護(hù)目錄普通權(quán)限下會被拒絕。解決辦法有兩種思路如果是文件被占用先找到占用進(jìn)程并關(guān)閉它或者讓腳本自動重試如果是權(quán)限不足需要以管理員身份運行或者修改目標(biāo)目錄的ACL我給個實用的重試封裝import shutil import time from pathlib import Path def copy_with_retry(src: Path, dst: Path, retries: int 5, delay: float 1.0): for i in range(retries): try: shutil.copy2(src, dst) return except PermissionError: if i retries - 1: raise time.sleep(delay) print(f目標(biāo)文件被占用第{i2}次嘗試復(fù)制...)這個函數(shù)在文件被Excel或其他程序短暫占用時很管用比如從共享目錄批量拉取文件時Office套件常常短暫鎖定文件。4.2 shutil.copy、copy2、copyfile三兄弟的區(qū)別shutil提供三個復(fù)制函數(shù)很多人不清楚差異直接導(dǎo)致復(fù)制出來的文件缺失元數(shù)據(jù)。它們的區(qū)別如下函數(shù)復(fù)制內(nèi)容是否保留權(quán)限是否保留時間戳目標(biāo)可以是目錄shutil.copyfile只復(fù)制文件內(nèi)容否否否shutil.copy文件內(nèi)容 權(quán)限部分否是shutil.copy2文件內(nèi)容 權(quán)限 元數(shù)據(jù)是是是我的經(jīng)驗是絕大多數(shù)場景直接用copy2因為它盡量保留文件的修改時間和訪問時間在備份、歸檔類腳本里非常重要。如果備份后還需要用類似rsync的思路對比文件差異時間戳的存在能省去很多麻煩。copyfile適合那種只要內(nèi)容、別的都不管的極端場景。還要注意copy2和copy都允許dst參數(shù)是一個目錄這時會保留原始文件名而copyfile要求dst必須是完整的文件路徑。4.3 shutil.move跨目錄和跨文件系統(tǒng)時的行為差異shutil.move是移動文件的推薦函數(shù)但它內(nèi)部邏輯會讓很多人困惑文件在同一個文件系統(tǒng)內(nèi)時它直接調(diào)用os.rename速度快但跨文件系統(tǒng)時它會先復(fù)制再刪除速度慢而且需要臨時空間。一個容易踩的坑是shutil.move的dst參數(shù)如果是已存在的目錄文件會被移進(jìn)這個目錄如果是一個文件路徑那就是重命名。寫代碼時最好明確意圖from pathlib import Path import shutil src Path(/tmp/data/report.csv) target_dir Path(/backup/2024/) target_dir.mkdir(parentsTrue, exist_okTrue) # 明確要移動到目錄中 shutil.move(str(src), str(target_dir / src.name))另一個常見問題是目標(biāo)目錄不存在。shutil.move不會自動創(chuàng)建目標(biāo)目錄如果目標(biāo)路徑的父目錄不存在它會拋FileNotFoundError。所以移動之前一定要先mkdir(parentsTrue, exist_okTrue)。4.4 批量重命名時如何保住文件安全先演練再動手批量重命名是文件操作腳本里最容易翻車的場景。我吃過最大的虧是重命名時新舊文件名有交叉處理到一半文件已經(jīng)改名了后續(xù)的源文件路徑失效。核心原則有兩條先把所有操作列成計劃再統(tǒng)一執(zhí)行執(zhí)行前檢查是否有重名沖突代碼可以這樣寫from pathlib import Path base Path(/home/user/photos) rename_plan [] for path in base.glob(IMG_*.jpg): # 假設(shè)要把 IMG_00123.jpg 改成 2024_00123.jpg new_name 2024_ path.name[4:] new_path path.with_name(new_name) if new_path.exists(): print(f跳過目標(biāo)已存在: {new_path}) continue rename_plan.append((path, new_path)) # 統(tǒng)一執(zhí)行 for old_path, new_path in rename_plan: old_path.rename(new_path) print(f{old_path.name} - {new_path.name})這里的關(guān)鍵是用path.with_name()生成同名目錄下的新文件名比手動拼接父路徑靠譜得多。另外建議在重命名前先打印所有計劃給自己一個最后檢查的機(jī)會。搞批量操作時寧可慢一點也別一股腦跑完再發(fā)現(xiàn)全亂了。4.5 刪除操作的后悔藥別直接rmtree大多數(shù)人刪除文件時直接os.remove或shutil.rmtree這當(dāng)然沒問題但我在處理重要數(shù)據(jù)時習(xí)慣先做一個軟刪除把文件移動到臨時回收目錄而不是直接刪。這樣萬一手滑刪錯了還能救回來。import shutil from pathlib import Path TRASH_DIR Path(/home/user/.trash) TRASH_DIR.mkdir(exist_okTrue) def safe_delete(path: Path): dst TRASH_DIR / path.name # 如果回收站已有同名文件加時間戳避免覆蓋 if dst.exists(): dst TRASH_DIR / f{path.stem}_{path.stat().st_mtime}{path.suffix} shutil.move(str(path), str(dst))這個軟刪除策略配合定時清理腳本既安全又不會讓回收站無限膨脹。特別是批量清理日志、臨時文件時強(qiáng)烈建議先軟刪除觀察幾天確認(rèn)沒問題再物理清除。5. 讀寫文件時的編碼與內(nèi)容處理亂碼不只是加個encoding那么直白5.1 用Path.open還是open以及with語句的必要性讀寫文件最簡單的方式是內(nèi)置的open()但如果你已經(jīng)在用pathlib處理路徑直接用Path.open()會更統(tǒng)一from pathlib import Path path Path(report.txt) # 寫法一open函數(shù)字符串路徑 with open(report.txt, r, encodingutf-8) as f: content f.read() # 寫法二Path.open with path.open(r, encodingutf-8) as f: content f.read()兩者其實沒本質(zhì)區(qū)別Path.open就是幫你把路徑轉(zhuǎn)成字符串再調(diào)內(nèi)置open。真正要強(qiáng)調(diào)的是with語句。忘了with會導(dǎo)致文件句柄不釋放Windows上最直接的后果就是文件被占用、后面想刪都刪不掉。這也是很多os error 5的根源之一腳本運行完進(jìn)程還在文件句柄還占著后續(xù)操作全失敗。5.2 Python 3的open默認(rèn)編碼為何會坑你Python 3里open()打開文本文件時默認(rèn)編碼取決于系統(tǒng)區(qū)域設(shè)置。Windows中文系統(tǒng)通常是gbkLinux通常是utf-8。這意味著同樣一段代碼在Windows上可以正常讀中文文件但部署到Linux上可能直接拋UnicodeDecodeError。最穩(wěn)妥的做法是每次打開文本文件都顯式指定encodingutf-8除非你能確定文件確實不是UTF-8。對中文環(huán)境來說老系統(tǒng)傳下來的txt文件經(jīng)常會帶著GBK編碼處理這些文件時需要格外小心可能在讀取時就得指定encodinggbk。判斷文件實際編碼推薦用chardet庫做個初步猜測import chardet def detect_encoding(path): raw path.read_bytes()[:4096] result chardet.detect(raw) return result[encoding] or utf-8注意chardet不是百分百準(zhǔn)確尤其是對短文本。我的做法是先嘗試utf-8失敗后回退到gbk再不行才用chardet。5.3 BOMUTF-8文件里藏著的三個不可見字符另一個高頻坑是UTF-8 BOM。某些Windows程序特別是老版記事本保存UTF-8文件時會在文件開頭寫入一個\xef\xbb\xbf的BOM標(biāo)記。Python讀取時如果不處理字符串開頭會包含這個不可見字符導(dǎo)致if content.startswith(---)這種判斷失效。修復(fù)方法很簡單用utf-8-sig編碼讀取with path.open(r, encodingutf-8-sig) as f: content f.read()utf-8-sig讀取時會自動跳過開頭的BOM。但要注意寫入時用不用utf-8-sig要看你的下游工具。如果文件是給新程序用的用utf-8就行別主動加BOM如果是給老Windows程序用加BOM反而保險。5.4 大文件別用read()一次性讀完搞懂緩沖區(qū)新手最容易犯的錯是讀大文件時直接read()一個幾GB的日志文件能把內(nèi)存撐爆。正確的做法是逐行迭代with path.open(r, encodingutf-8) as f: for line in f: # 處理每一行 process_line(line)如果文件不是按行組織、需要按固定塊讀可以用read(size)with path.open(rb) as f: # 二進(jìn)制模式 while chunk : f.read(8192): process_chunk(chunk)這里8192是經(jīng)典的緩沖區(qū)大小。如果你的腳本頻繁讀寫大量小文件還有一個性能優(yōu)化點把多個文件的讀寫邏輯合并減少系統(tǒng)調(diào)用次數(shù)。比如需要批量改文件內(nèi)容時不要每改一個就開關(guān)一次文件句柄先全部讀取到內(nèi)存中處理完再一次寫回。6. 生產(chǎn)環(huán)境里的防御式文件操作異常層次、競態(tài)與健壯代碼風(fēng)格6.1 異常金字塔FileNotFoundError、PermissionError和OSError的家族關(guān)系文件操作最常見的異常有三個FileNotFoundError、PermissionError、IsADirectoryError。它們都是OSError的子類這是理解異常捕獲邏輯的關(guān)鍵。try: shutil.copy2(src, dst) except FileNotFoundError: print(f源文件不存在: {src}) except PermissionError: print(f沒有權(quán)限訪問: {src} 或 {dst}) except OSError as e: print(f其他操作系統(tǒng)級錯誤: {e})捕獲順序是從具體到一般。如果你先寫except OSError后面的FileNotFoundError分支永遠(yuǎn)走不到。我見過不少同事在這個順序上栽跟頭。6.2 先檢查再操作的競態(tài)問題文件在兩次調(diào)用之間可能消失很多新手習(xí)慣這樣寫if path.exists(): path.unlink()這個寫法有一個微妙的競態(tài)問題exists()和unlink()之間文件可能被其他進(jìn)程刪掉或者新建。如果文件在這兩步之間消失unlink()會拋FileNotFoundError。生產(chǎn)環(huán)境下的文件操作永遠(yuǎn)要假設(shè)文件系統(tǒng)是動態(tài)的。更好的做法是直接操作捕獲異常這就是Python提倡的EAFP風(fēng)格Easier to Ask for Forgiveness than Permissiontry: path.unlink() except FileNotFoundError: pass # 文件本來就不存在目的已達(dá)到這種風(fēng)格寫起來更健壯也減少了系統(tǒng)調(diào)用次數(shù)。同理創(chuàng)建目錄時用mkdir(parentsTrue, exist_okTrue)而不是先判斷exists()再決定要不要創(chuàng)建。6.3 冪等操作設(shè)計讓腳本可以放心跑第二次所謂冪等是指執(zhí)行一次和執(zhí)行兩次效果相同。日志清理腳本、備份腳本、臨時文件整理腳本都應(yīng)該設(shè)計成冪等的否則你第二次運行時會因為文件已經(jīng)不存在而出錯。以清理超過30天的緩存文件為例import shutil import time from pathlib import Path CACHE_DIR Path(/tmp/myapp_cache) CLEAN_BEFORE time.time() - 30 * 24 * 60 * 60 if not CACHE_DIR.exists(): exit(0) for path in CACHE_DIR.rglob(*): try: if path.is_file() and path.stat().st_mtime CLEAN_BEFORE: path.unlink() print(f清理: {path}) elif path.is_dir() and path.stat().st_mtime CLEAN_BEFORE: shutil.rmtree(path, ignore_errorsTrue) except FileNotFoundError: # 如果在判斷和刪除之間文件被別人清了直接忽略 pass注意ignore_errorsTrue這個參數(shù)它會讓rmtree忽略文件不存在、權(quán)限不足等問題非常適合冪等清理場景。當(dāng)然也要注意別因為ignore_errors掩蓋了真正的問題在重要操作里還是顯式處理異常比較好。6.4 網(wǎng)絡(luò)共享目錄那些讓人抓狂的延遲和占用處理Windows共享目錄或NAS掛載點時文件操作會表現(xiàn)出一些本地目錄沒有的問題網(wǎng)絡(luò)延遲導(dǎo)致操作超時、文件被其他用戶鎖定、路徑訪問時斷時續(xù)。我的經(jīng)驗是對網(wǎng)絡(luò)路徑的操作要合理地重試但絕不能無限重試。上面那個copy_with_retry模式再擴(kuò)展一下加上超時上限和日志輸出就能變成可靠的生產(chǎn)代碼。另外網(wǎng)絡(luò)路徑上盡量別用shutil.rmtree文件太多時可能異常緩慢優(yōu)先考慮分批刪除。6.5 實操收尾我個人的文件操作代碼習(xí)慣寫了這么多年文件操作腳本總結(jié)了幾條自己一直堅持的習(xí)慣第一所有腳本開頭都用Path(__file__).resolve().parent定位基準(zhǔn)目錄絕不依賴運行時的當(dāng)前工作目錄。第二所有文本讀寫都顯式指定編碼utf-8為默認(rèn)特殊情況再說。第三所有批量操作先打印計劃再執(zhí)行寧可多花五秒看輸出也不要一失手刪掉一堆文件。第四所有刪除操作都先軟刪除到回收目錄觀察幾天再物理清除。這幾條習(xí)慣沒有一條是高級技巧但每一條都幫我在真實項目里避免過災(zāi)難性的故障。文件操作這活看著簡單出的問題往往是最隱蔽、最難以恢復(fù)的——文件刪了可以重新下載但配置覆蓋錯了可能直接讓服務(wù)起不來。拿捏好os、pathlib、shutil這三個庫的分工再把這些防御式的習(xí)慣融入代碼里你寫的文件處理腳本就能從本地跑通升級成生產(chǎn)可靠。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91校园春色长篇| 久久久999国产精品| 18禁免费视频| 欲色啪| 91超碰人人| 大二网站亚洲| 操淫穴亚洲五月丁香| 天天综合精品| 免费强奸av| 亚洲日韩国产精品| 自拍六区| 色网1| 丁香五月激情综合| 国产懂色精品国产av| 欧美久久婷婷| 丁香五月激情综合| 国产 日韩 欧美高清| 欧美精品激情| 欧美综合777| 中文字幕黑人大片| 人妻中文在线| 黄网色一区二区三区四区精品| 国产精品日日摸夜夜添骚逼| 久久精品| 久久中出| 天天摸夜夜添无码小视频| 91美女精品| 伊人青青草久久| 婷婷伊人| 操逼日韩无码| 秋霞蝌科网日本一区| 亚洲精品一区二区精品| 超碰97中文| 91精品操美女| 曰本特级特黄特色黄色A级网站高清在线免费看 | 97色色色综合网站| 丝袜熟女2P| 久操婷婷| 色9999日韩国产| 91人人臊| 无码国产精品午夜不卡(| 欧美一级美片在线观看免费| 国产激情视频一区区三区| 欧美色图亚洲色,麻豆| ai欧美亚洲小说| 精品视频97| 无码99| 狠狠色丁香| 婷婷五月天激情网| 国产色呦呦| 日韩欧美成人性爱在线| 99亚洲精品| 强奸国产精品视频| 丁香六月激情| 操逼网免费无码视频| 日韩精品人妻一| 一本一道波多野毛片中文在线| 日韩天天综合| 欧美人妻少妇| 国产在线视频午夜精华在| 一起草三级AV电影在线观看| 97久久超碰| 色五月首页| 狠狠干狠狠干| 91殴美大片| 97se综合网| 99无码狠狠久久| 女人综合网| 大JI巴好深好爽又大又粗视频| 国产色产精品在线观看| 国产精品蜜臀久久久久无码AV| 色色色日本| 女人被男人桶爽视频网站| 日本丝袜人妻内射| 六十路日本| 日本免费中文一区二区三区四区| 91暧暧| 国产女人9999| 久久黄人人爽视频| 久久伊人最新网址视频| 再深点灬舒服灬太大了添视频 | 婷婷操逼| 国产美脚女优尤物在线观看| 色网1| 蜜臀久久99精品久久久久久酒店| 日日操免费视频| www欧美性爱| 久9久| 东京热精品97综合网| 色狠狠一区二区三区香蕉| 熟妇色99| 亚洲成a人在线观看久| 26uuu国产成人综合| 伊人久久大香大香线蕉中文| 亚洲城人男人的天堂| 男人网站婷婷| 国产一级内射高清视频| 国内毛片婷婷六月色| 亚洲福利中文字幕在线| 91爱做| 久久无码精品| 亚洲另类综合欧美| 91网站18+| 很很操在线| 国产乱伦性爱区| 五月婷婷激情| 精精品人妻一区二区三区| 老外又粗又长一晚做五次| 精品一二三区四视频| 青青草久久一区网| 97日韩| 女人喷水视频在线观看| 日日干夜夜操视频h| 超碰九7免费| 国产情侣自拍在线播放| 欧美性综合| 久久午夜色播影院免费高清| 丁香六月啪| 97超碰人操| 欲色综合| 色情综合网| 小骚逼被操的爽不爽| 手机看片91人妻| 91黑丝在线播放| 性性久久| 欧美大香蕉同搞| 超碰97色色| 亚洲精品人体| 亚洲中文字幕噜噜噜久久久| 欧美人妖内射| 韩国一级做A片免费的| 日本好吊色视频| 国产精品一区二区亚洲人成毛片| 欧美72网页| 亚洲色综合| 嗯嗯嗯好爽| 亚洲图片欧美偷拍| 99丝袜福利在线播放| 久久伊人影院| 性欧美另类高清| 男人的天堂va在线| 久久e6只有精品| AAAA欧美日韩| 东北女人的毛片| 国产精品国产亚洲区艳妇糸列| 久久日韩毛| 2023天天操夜夜操| 久久综合18p| 台湾一区国产高清在线| 天天干天天日天天射黄色大片 | 操逼逼福利视频| 久久久精品一区二区| 亚洲av无线观看| 日本高清一本二本免费不卡| 黄片www.| 草草电影院| 日韩懂色网| 青娱乐国产精品| 天天综合网~91| 九九九九九九九精品视频| 国内外内射高清视频| 东北女人av| 成人性爱av| 狠狠干妹子| 嗯啊不要在线| 91操人| 91精品人妻一品二品三品| 黄色污污污污污污网站| 免费无码国产精品v片在线观看| 91成人久久| 伊人久久婷婷| 久久激情亚洲精品无码?V| 欧美性色欧美| 大香蕉日亚洲日本亚大| 99热免费| 国产亚州精品美女久久久免费| 中文字幕第9页萱萱影音先锋| 精品九九淫乱男| 熟女乱伦二区| 欧美日韩国内不卡| 亚洲精品国产无码高清| 国产精品一级二级在线| 大香蕉在线视频重口味毛片在线| 亚洲天堂 视频你懂的| 加勒比伊人| 99热日| 日韩AV电影网站| 国产精品无码av在线 | 国产精品乱码久久久久久久久| 午夜丁香| 亚洲成熟国产精品美女| 伦激情人妻另类人妻| 91老妇女| 99热99re6国产在线播放| 欧美熟妇视频| 国内自拍 日韩激情 99| 天天做日日做| 1769国内精品视频| 99无码| 伊色久人大在线| 精品综合久久久久久97| 大香蕉伊利av| 淫妻综合网| 偷窥自拍A片| 欧美一级美片在线观看免费| 国产精品久久| 啪啪自拍九九综合| 一区二区三区色综合| 日韩精品区二区三区不卡| 午夜久久无码1000合集| 亚洲图片欧洲图片aⅴ| 亚洲精品一区二区日本| 久久婷婷电影网| 亚洲a色| 很很很很操| 四虎影库国产精品免费| 天美传媒国产原创中文字幕亚洲欧美另类| 国内精品伊人久久久久影院会| 免费啪啪av| 97超碰色| 欧美亚洲国产91在线| 色香AV| 91无遮挡| 国产亚洲99久久精品熟| yw尤物av无码点击进入麻豆| 日韩欧美性爱电影在线观看| 91亚洲综合| 91亚洲电影| 97精品一区二区三区免费| 91 综合网| 亚洲国产欧美一区二区潘金莲| 超碰97亚洲| 五月天亚洲色图| 2019天天干| 中国操逼无码| 蜜乳AV网址| 你懂得91| 国产精品久久久视频| 欧色综合| 都市激情人妻一区二区青青操视频 | 亚州高清AV| 精品免费成人久久| 9久久精品| 翔田千里爆乳巨臀无码| 人人操人人操人人人操| 久久久无码国精品无码三区三区| 天天射网| 久污| 夜夜躁狠狠躁日日躁av| 国产精品午夜福利亚洲综合网| 三级激情网站| AV 少妇 人妻 偷拍| 超碰 97国产熟女| 激情综合亚洲| 精品国产72| 2020中文字幕在线| 久热精品在线国产| 欧美十八禁在线看| 久久久久久大| 爱丝福利| 国产亚洲色婷婷久久99精品91 - 百度| 97超碰欧美中文字幕| 日韩免费在线视频观看| 视频国产精品未满十八禁止在线观看| 国产精品一二三免费网站| 欧美天堂日韩三级国产传媒| 91痴汉| 成年人黄色视频免费| 曰本人妻人人澡人人夹| 国语人妻精彩刺激| 欧美97免费| 91精品国产综合久久久蜜臀酒店| 2019天天干天天操| 激情第四色| 色哟哟av网址| 亚洲无码超碰免费| 久久久久久国产无码精品| 日本在线一二| 国产精品日日摸天天碰| 亚洲操人| 国产久久男人天堂| 国产无马在线| 久久草草欧美精品| 啊啊啊啊在线播放| 四虎影视永久在线免费| 亚洲AV成人无码一区二区三区在线观看 | 久久一区无码| 超碰人人干天天射| 人人干人人操人人..com| 欧美九九爱| 成人在线视频一区| 18禁无码永久免费无限制| 色噜噜狠狠色综合日日| 熟女久久| 激情综合网五月婷婷五月天| 加勒比AV网| 26uuu最新| 精品久久久久,69国产成人精| 夜夜青青无码影院| 干日本人少妇午夜寂寞影院| 日韩久草| 一级久久久久久久久久久| 极品粉嫩少妇视频| 日本1区2区不卡视频| 国产日韩精品一区二区三区| 91国模| 久久精品三级影视| 欧美日韩亚洲国产中文永久天天看| 91人妻精华帖| 久久草视频污视频| 国产亚洲女v在线观看| av亚洲天堂资源网站| 国产精品乱码久久久久久久久| 日韩欧美国产高清视频| 国内毛片四区| 另类 综合 日韩 欧美 亚洲| 国产高清吃奶免费视频网站| 日本 免费 一区二区三区 久久香蕉 | 岛国1区2区3区在线观看| 香一区二区三区| 国产女大学生AV| 成年男人的天堂| 超碰免费人妻在线| 9热9热综合网| 青娱乐国产精品| 亚洲大色鬼| 无码国产精品午夜不卡(| 日日躁狠狠躁天天躁精品| 三级片网站在线播放| 91大香蕉伊人| 99热亚洲天堂| 日韩精品在线观看观看| 成人一区二区三区四区| 草草影院日本第一页| 超碰中文字幕人妻草一区| 性爱Av免费| 天天天做天天天爱天天天爽| 夜夜操二区| 熟女探花啪啪| 久久精品中文字幕女同| 日本大片日本一区二区免费高清| 日本欧美中文字幕| 色老牛| 操逼逼中文字幕| 无码二级三级| 日本丝袜美腿人妻九九| 亚洲精品国产精品乱码不99| 亚州一区二区| 亚州欧美综合| 色哟哟国产精品免费网址| 中字幕人妻一区二区三区| AV男人天堂网| 99热成人| 欧美强奸乱能| 清纯唯美第一页| 欧美老妇女内射网址| 久久久久久精品免费看A级| 亚州欧美色图| 夜夜操夜夜高潮夜夜爽国产精品区| 伊人精品国产| 欧美后进式| 久操视频免费在线观看| 思思热国产高清| 国产麻豆一区二三区| 人妻丝袜二区| 精品中文日韩字幕视频| 四虎AV无码| 久久精品店| 女人18精品一区二区三区| 国产一区二区三区不卡手机在线| 福利社区午夜一区二区| 96精品久久久久久久久久| 91国产大片| 亚洲欧洲偷拍一区| 操操碰| 亚洲色系另类精品国产| 天堂8在线新版官网| 天堂精品一区| 欧美图片色五月天| 国产后入清纯| 激情小说亚洲图片| 日韩懂色网| 欧美另类色图片| 亚洲一区二区精品福利| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 久久久久96| 上床不卡网站| 麻豆黄四叶草网站| 色优久久| 国产在线不卡导航| 日韩天美| 啪啪91| 白丝1区2区3区| 中亚精品极乱| 色哟哟的毛片| AV天堂丝袜| 婷婷四五区| 色色国产| 色蜜AV| 色av中文字| 天天影视综合网欧美精品| 五月婷婷六月色| 开心五月深爱五月| 国产刺激视频| 日韩av熟女一区二区三区成人| 成人片在线播放| 中文字幕一区av| 操狠狠| 久都青青视频| 国产一区麻豆免费观看| 青青草精玖玖69精品| 精品人妻视频一区二区三区蜜桃视频| 欧美久久草熟女| 欧美美女啪啪视频| 精品无码久久久久| 黄色一区三区| 综合网亚洲| 明星性猛交ⅹxxx乱大交| 夜夜草天天| 曰韩操B| 天天干夜夜操网| 日韩人妻无码专区| 九色PORNY9l原创自拍| 日韩av在线播放不卡| 操美女高潮抽搐白浆| 欧美极度丰满熟妇hd| 激情综合网激情五月天| 亚洲男人的天堂V| 中文字幕久久精视频久久大全| 啊啊啊啊啊好大好舒服想要| 97精品在线| 综合亚州欧美| 韩国免费播放一级毛片| 波多野结衣先锋影音| 久久五月视频| 2019天天操天天爽天天拍| 在线色资源| 夫妻天天操岛国视频| 免费av在线播放二区| 在线强奷到舒服的无码视频| 四虎 精品 WWW| 999 久久久| 天天综合中文字幕 91| 天天干天天燥| 亚洲日本成人动漫| 翔田千里A片一区二区| 欧美日韩日产免费网站看| 91呆哥人妻| 嫩草 人人网精品| 大香蕉2017| av无线看| 亚洲男人天堂网久久| 日韩青久久| 人妻9117c| 伊人久久艹| 色噜噜国产在线| 欧日韩在线观看| 手机在线免费看的av| 色婷婷久久| 和协影院中文字幕三区| 无码不卡八戒| 热天堂一区二区| 麻豆av一区二区| 91呆哥人妻| 神马久久网| 日产操逼| 色小视频蜜乳| 9美女超碰在线免费观看| 精品丝袜无码一区二区三APP| 999在线电影香蕉| 久久风骚城市人| 爽极品影院| 丁香五月天婷婷姐| 婷婷久久久精品| 欧美经典一区二区三区| 亚洲少妇在线影音| 1240青青草一区二区三区视频天爱| 探花精品视频| 我要色综合网站| 亚洲日韩成人性爱视频| 亚洲资源网| 性久久| 久久手机好看网站| av网站在线看| 蜜奶av| 一区在线精品中文字幕| 日韩天美| 亚洲欧洲无码bt精品合集| 亚洲骚女一区二区三区| 天天看夜夜看日日干| 欧亚乱色熟一区二区三四区| 凹凸视频在线一区二区| 色999人与兽| 电家庭影院午夜69久久夜色精品国产69乱 | 久久欧美按摩999| 美女91AV| 哈哈操电影AV| 国产福利视频精品视频| 欧美999999| 性色av蜜臀av色欲aV| 男人的天堂久久狠| 国产三级电影免费观看| 久久久夜夜夜| 午夜性| 日韩卡一卡二卡三在线| 少好三P| 免费视频a级毛片免费视频| 96麻豆精品一区二区三区| 亚洲国产欧美日韩人妻日中文| 亚洲欧美日韩不卡人妻| 色九月综合| 国产精品久久久久久久毛片1| 97精品网站| 国产 无码 一区二区| 自拍六区| 最新av在线| 激情视频网址| 久久久一区二区三区三州| 亚洲丝袜99| 色色婷| 欧美一级AAAAAAA| 99精品无码| 插B在线观看| 你懂得91| 欧美大香蕉同搞| 殴美性天天| 好好的日:com久久九九| 狠狠操狠狠爱| 国产51色综合久久免费| 91综合网站| 丰满熟女人妻一区二区三五十一路| 91oumei| 一本精品日本在线视频精品| 免费男人的天堂| 日韩一级二级在线| 婷婷尹人大香蕉免费| 国产一区二区三三视频| 亚洲欧美不卡线| 超碰99热中文字幕| 欧亚乱色熟一区二区三四区| 色色色色网站| 不卡中文字幕aⅴ在线| 久操电影网| 国产亚洲精品美女| 制服乱伦| 免费在线黄片视频| 大香蕉免费3| 97在线免费看视频| 强乱老妇中文字幕| 欧美韩日精品资源| 色大师网站www永久网站视频| 亚洲AV无码国产精品久久久久| 免费啪啪av| 黄色成年| 免费男人的天堂| 青青青草伊人精品| 91天美传媒在线观看| 九久久九精品视频| 青青青国产| 激情网五月天| 色色色999| 日本色色色| 久久久久久99AV无码免费网站| 欧综合网| 国产在线激情| 国产精品伦理| 91综合无码| 天天超级碰碰碰| 嗯嗯啊啊好大好爽| 性色高清在线| wwe 天天干.com| 欧美熟妇操操视频| 欧美A√综合网| 欧美大香蕉97| WWW.加勒比人妻一区不卡.com| 7月婷婷综合| 久久不卡一区二区 | 60秒免费小视频| 91麻豆天美国产| 有码人妻系列| 插老姨肥穴| 大香网伊人久久综合网eew| 色婷婷在线视频精品导航| 国产精品乱人伊人网| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 精品午夜福利国产一区二区在线观看| 性爱视频啪啪啪啪| 亚洲图片偷拍视频区| 久久五月视频| 后X久久| 91/欧美| 日本道日本道中文字幕日本道最新日本道在线观看 | 大香蕉男女超碰精品在线| 欧美男人一区| 亚洲伊人久久精品狠狠在线| 国产不卡精品91| 久久天天躁日日躁狠狠躁| 亚洲欧洲第二视频在线观看色图| www.男人天堂| 一本色道久久综合亚洲二区三区| 久久精品成人一区二区三区蜜臀| 最新AV在线| 五月婷婷无码| 国产剧情一区在线观看| 欧美中文字幕一区| 欧美精品亚洲精品日韩传电影| 欧美综合综合| 视频国产欧美在线播放| 国产精品久久久久亚洲av| 国模精品娜娜一二三区| 一区二区首页| 久久久久久久久女黄| 97免费在线观看视频| 黄色免费一级在线毛片| 欧美久久伊人| 佐山爱中文字幕| 欧美激情一| 久久久99免费| 激情综合五| 天天综合网AV91| 欧美黑人熟妇精品91| 亚洲第一精品在线视频| 人妻少妇一区二区| 国产精品乱码久久久久久| 国产熟女精品一区二区| 亚洲成人美女无吗| 久久爱超碰网| 激情视频图片| 99re热有精品视频国产| 欧美日韩人人精品| 操熟女91| 91成人精品在线播放| 4141514逼喷水三级片| 亚洲中文sv| 一级性爱啪啪视频| 人人妻人人操人人乐| 五月天人妻综合| 亚洲综合另类小说色区亚洲成av人片在www | 五月天婷婷小说| 日韩精品9区| 97欧美综合| 午夜天堂啪啪| 美女网站黄页| 日本黄大片在线观看视频| 视频二区美腿丝袜制服人妻欧美 | 国产麻豆91欧美一区二区久久婷婷国产精品 | 熟女网站最新| 国产精品久久aV| 久久久久日本视| 亚洲熟妇AV日韩熟妇在线| 欧美性爱第一区| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 久久99干一本高清| 两女互慰AV高潮喷水在线观看| 97天天摸天天碰| 色臀AV| 天天做日日爱夜夜爽| 97视频在线观看网站| 国产亚洲精品美女久久久| 亚洲国产一级中文综合久久天堂在线免费观看| 97天堂| 伊人久久亚洲中文字幕| 亚洲精品97| 啊啊啊com| 国产精品美女久久久久久网站| 久久久爆乳翘臀一线天伦理视频| 久久精品久久九九精品| 中文字幕视频免费| 极品尤物自安慰| 中国黄色特级精品一区二区三区片| 亚洲天堂中文字| 熟女高潮合集-永久久久-成人AV| 天天日天天干天天整| 欧美在线|亚洲| 乱老女人一区二区视频| 91啪啪| 暖暖精品二区三区观看| 国产丝袜美女在线一区| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 一区二区三区色综合| 日本成人A片免费看| 亚洲欧洲无码一区夜| 久久久久久久国产a∨| 欧美色图99| www.狠狠干.coom | 日韩钢筋无码高清啾啾啾| 久久精品人人做人人看| 中文在线视频| 99这里只有精品| 亚洲乱码精品一区二区| 97爱碰| 99热这里只有精品9| 精品一区二区三区麻豆| 久久综合久久综合人久久夜精品| 欧美热图99| 国产四虎在线| 51一区二区三区| 亚洲丝袜二区在线| 怡红院视频在线| 性夜影院爽黄A爽免费动漫| 超碰激情808| 草莓精品视频| 97在线免费| 日本不卡码黄色| 亚洲AV秘无码一区..| 欧美淫乱视频| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 日韩一级性爱无码| 久久久久久久久国产| 亚洲第一页色| 全球成人中文在线| 超碰97伊人| 无码人妻精品一区二区三区九九| 青青草密桃在线播放| 东北丰满熟女国产一区| 91美女小视频| 中文字幕第7页| 久九九九九九九热| 精品超碰国产| 在线播放免费av福利片| 国产一二三在线视频五十路| 亚洲精品一卡二卡三卡福利视频网站| 久草网站免费在线观看| 3PAV乱伦视频| 亚洲第一页综合在线| 久久久久久久久久久97| 天天插天天操| 免费一级a毛片久久久久久鸭绿欲| 久草男人天堂| 四虎永久在线精品免费网址| 麻豆国产免费影片| 欧美一区二区福利在线| 久操视频在线观看| 91色欧美| 天天综合网亚洲综合网| 超碰在线第一页| 啊啊好多水| 青青草原狼av| 刺激性视频黄页| 猛交交| 久久99综合| 99九九精品| 免费人成?大片在线播放| 亚洲国产一区二区入口| 欧美精品成人在线播放| 蜜乳成人AV| 在线a亚洲视频播放在线| 98超碰欧美| 91丝袜人妻| 亚洲精品九九九九九九| 97精品在线| 人妻丝袜肏逼| 啊啊啊啊啊啊啊啊啊啊在线观看| 欧亚第一综合网| 天天干天天日天天射黄色大片| Av色五月| 99www.bibizy香蕉资源国产一区二区三区高清 | 97国产色综合| 成年女人一区| 久久久艹艹艹| 天天综合色| 日韩精品三区四区| 台湾佬中文娱乐自偷自拍| 97色色婷婷| 97超碰碰碰| 污污汅18禁网站在线永久免费观看| 大香蕉欧美| 精品国产一区探花在线观看| 免费的黄片有限公司| 伊人丁香五月婷婷| 国产精品999zyz| 热九九精品| 中文字幕一区av| 99久久无色码| 男女性扦B| 黄页网站成人免费| 日韩啪啪视频| 国产一区免费午夜视频| 亚洲成a人片在线观看中文!!!| 亚洲成人性爱在线观看| 91操人| 红杏大香蕉| 色综合中文字幕不卡| 日夜干射色啊| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 精品超碰国产| 大香蕉碰碰| 亚洲日韩一区电影| 国产亚卅97| 91精品少妇搡搡搡| 久一区久久蜜桃| 久久精品 六十路 熟女 欧美| 人人操我人人干| 丁香六月东京热| 国产馆极品诱惑| 中文字幕文字幕无码一区二区三区电影99| 色婷婷一区二区三区久久午夜成人不| 嗯嗯啊啊操我| 强奸乱伦Av网| 亚洲午夜免费狠狠干| 日日狠狠久久偷偷色综合免费| 国产精品肉丝自拍| 91黑丝操| 污色区网站| 国内自拍 日韩激情 99| 99.色网| 久久精品一区二区三区蜜桃臀| 久久久久久9| 亚洲九月丁香| 麻豆AV一区二区| 欧美啪啪天堂| 亚洲激情综合另类男同| 色天使亚洲综合在线观看| 久久理论字幕视频| 97少妇人妻中文字幕久久| 欧美黄页| 男人的天堂亚洲| 97欧美色综合| 免费福利视频中文字幕| 99久久婷婷丁香| 熟妇视频一区二区三区在线观看| 亚洲天堂久| 岛国色情视频在线观看| 操人无码| 久久中文字幕女同性恋一区| 思思视频免费看网站| 丁香激情网| 久热久操| 无码直播久久久| 国产天美欧美| 俞拍久久国应视频| 国产一区二区视频在线播放| 好看的久久不射无码影视影院| 久久尹人大香焦视| 在线99热| 精品无码一区二区三区| 手机在线A片| 精品国产91久久久久久一区黄无| 91成人无码| 久久91精品国产9丨久久分亭| 欧美少妇第一页| 97超碰护士| 国模精品娜娜一二三区| 人妻素股| 婷婷av在线中文字幕| 日本免费一区二| 九九九热| 啊a一区在线| 青娱乐福利99| 欧美熟妇人体| 免费成人在线观看91| 鸥美插入视频| 在线国产福利网址导航| 超碰在线97国产| 精品国产91av一区二区三区| 色诱avtt| 九热超碰| 特级大荫道BBwBBwBBW| 强奸a片网| 看日韩黄片| 999在线电影香蕉| 日本不卡高清视频| 特色a在线上| 97超碰逼| 99re8免费高清在线| 亚洲色图久久成人| 天天综合网~69| 色999亚洲人成色| 黄色片一区二区三区四区五区| 亚欧色图在线激情| 粉嫩小泬久久久一区二区| 天天摸天天插天天日| 91视频国品一二三区| 亚洲日韩美女中文字幕乱| 韩三级a视频在线观看| 粉嫩av平台| 黑人精品XXX一区一二区| 日韩啊V| 97鸡把在线视频| 四虎精品一区二区| 日日爱99| 国产精品视频自拍在线| 少妇干B| 亚洲加勒比| 粉嫩av在线| 中字幕人妻一区二区三区| 日韩卡一卡二卡三在线| 亚洲精品精品一区二区| 爽 好舒服 无码刺激久久| www超碰| 偷窥自拍A片| 欧美一级色| 91大神电影天堂| 久久久久亚洲精品| 亚洲脚交| 91丝袜美女视频| 天天92av| 在线国产福利网址导航| 99老司机精品视频在线观看| 蜜臀AV网站| 青青草五月天| 偷拍盗拍亚洲色图图片| 日本潮催一卡操| 在线播放一级无码视频| 日本三级中国三级99人妇网站| 97 国产一区| 啊啊啊想要| 亚洲国产高清福利视频| 男人的天堂欧美| 九九九九热| 国产精品无码AV网站| 99精品网站| 欧美裸体美女日麻屄| 99在线无码精品秘 入口黑人| 人妻少妇久久久| 九九九九日本| 九九草| 日本免费中文一区二区三区四区| 亚洲免费精品一区| 欧洲综合色| 99热精品在线| 国产精品夜夜夜| 日本操BAV| 亚洲熟久久| 亚洲中文一区二区三区| 欧美激情亚洲情色| 无码少妇精品一区二区60岁老人| 破处bbq| 91free福利| 国产专区路线| 福利视频香蕉免费一区二区在线| 婷婷综合网站| 无码精品久久| 色九九综合AV| 日本三级韩三级99久久| 91精品国产91综合久久蜜臀| 亚洲色图加勒比| 在线中文字幕视频| 天天摸天天碰天天添青青| 欧美日韩在线视频网站| 屌色在线97视频| 国产在线观看91精品一区| 亚洲一二三精品久久网| 操逼天美3区| 欧美,日韩,中文,另类| 亚洲1区| 国产日韩色综合| 妇人噜噜| 人人操AV| 啪啪资源网| 9Ⅰ超碰| 夜夜爽爽夜夜精品视频| 色性综合| 精品无码久久久久久久久果冻糖心| 欧美精品 - 91爱爱| 精品一区二区成人动漫| 日本人妻最新在线中| 香蕉久久精品| Av色五月| 欧美美女自慰一区二区三区| 手机在线人成免费视频| 97超碰超碰| 久久久久久久97| 中文字幕一品色图| 天天热精品| 91蜜桃传媒精品久久久一区二区| 九九九九免费高| 日本伦理一区二区| 偷窥自拍亚洲色图| 天天添天天干电影| 大香蕉啪啪网| 99啪啪| 久久久久9| 亚洲国产成人精品999| 91亚州| 精品人妻一区二区三区四区石在线| 久久精品一区二区| 国产精品久久久久久久久久梁医生| 欧美亚州手机在线| 久久欧美1卡2卡3| 九九无码视频| 91蜜臀在线久久久久| 九九玖玖精品| 97视频新免费| 亚洲有码视频二区| 波多野结衣AV无码一区| 精品国产www久久| 色婷婷狠狠| 久久骚少妇| 人乳av| 国内精品嫩模A∨私拍小视频| 亚洲国产奇米影视久久| 免费视频a级毛片免费视频| 日韩AV电影网站| 精品国产久久乱码| 99超碰碰| 综合免费无码中文| 久久一二三四五六七八九区区区| 91丝袜激情在线| 在线洲亚线| 一级黄色视频网| 91无码中出人妻视频| 精品性爱久久视频| 色约约一区=区三区| 天天干干天天干干| 九九亚洲| 99999精品成人| 国内毛片四区| 国产综合网站在线播放| 天综合网| 少妇色综合| 少妇久久久| 人人爱人人乐人人操| 色色色色电影网| 好看的91视频| 蜜臀99久久精品久久久懂爱| 久久亚洲AV无码专区国产精品| 亚洲综合春色| 激情视频图片| 操逼操逼逼操操逼91 | 在线国产福利网址导航| 九九热免费在线国产视频伊人五月| 久久九九精品一区二区| 午夜啪啪片| 久久久久久久久久久人妻| 97超碰欧美精品| 亚洲五码一区二区三区| 欧美日韩婷婷中文| 欧美色偷偷| 久久黄色网址| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 99老司机精品视频在线观看| 中文伊人大香蕉视频| 国产97/欧美| 午夜黄色免费在线观看| 亚洲天堂人人妻| 伊人久久在线视频观看| 嗯嗯啊啊操死我| 12一15性XXXX粉嫩国产| 少妇二级| 亚州综合网| 六月婷婷综合| 超碰九区| 亚洲丝袜二区| 好吊色青靑草| 久久无码电影| 四虎影视永久在线观看精品免费网站| 色97干| 精品夜夜澡人妻无码| WWW美腿丝袜香蕉中文| 伊人久操| 极品久久久久久久久久久久久久| 国产日韩欧美中文在线播放| 麻豆2区1区天美| 日本αv| 嗯嗯嗯好爽| 男女无套 免费网站| 亚洲综合有玛| 东京热视频网| 色网综合网| 欧美性爱视频免费一区一A| 欧美啪啪啪91| 丁香久久| 国产欧美在线观看免费观看| 亚洲天堂另类美腿| 精品国产乱码| 亚av顶级裸体一区二区三区四区五区 | 中日韩久久久免费看| 一级啊性爱在线视频| 国产精品久久久亚洲第一牛牛_在线观看 | 九九热久久99精品re| 97精选久久| 日本精品一区二区中文字幕| 亚洲成人ab| 99操视频| 操b在线观看| 人妻精品综合中文字幕在线 | 中文字幕亚洲欧美在线不卡| 国产老女人久久毛| 91扒丝袜综合在线| 国产成年女人免费视频播放a| 亚洲天堂日本| 伊人影院综合是一个与深夜成人在线| 9精品在线| 色翁荡息又大又硬又粗又爽| 久久久久久久久国产| 欧美日韩高潮喷水91| 久久久性| 日日躁夜夜躁狠狠躁超爽| 91人人爽人人爽| 91动漫操逼视频| 97在线免费看视频| 亚洲的天堂网| 久久激情视频| 欧美性爱第一区| 玖玖无码超碰| 欧美日韩一干二干| 超碰人人在线| 国产亚洲精品一区二区三区| 亚洲色图 91| 亚洲、日韩、综合、另类| 男女真人网18| 日韩性爱长视频免费| 97视频在线免费| 91亚·色| 久操热线| 亚洲好看强奸乱伦| 91美女视频在线观看| 9999亚洲精品| 97精品国产97久久久| 操逼逼无码| 欧美区亚洲区偷拍区 | 黄色AAAAA欧美| 免费精品无码一级毛片牛牛影视| 玖玖草久草99蜜月一区二区三区| 人妻久热在线| 亚洲欧洲综合视频在线| 黄色电影在线播放综合网站| 99精品无码| 欧美亚洲AN| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 国产精品97超碰| 99视频内射三四| 又大又黄国产| 另类TS人妖一区二区三区| 九九热九九| 清纯唯美第一页| baiduhicn.com。| 乱理日韩中文| 男人夜色天堂ss| 激情色色| 天天干夜夜一操| 日本操大逼| 中文乱码字幕观看视频| 青青草原伊人网| 91无码人妻精品一区二区三区蜜桃 | 青青11操操操操操操操操| www狠狠| 国产 亚洲 丝袜 制服| 国产曰批免费观看久久久| 人妻色偷色噜| 91欧美大片| 天天干人人乐| 深夜国产福利| 97视频免费播放| 后入合集| 国产9l 大屁股| 人妻蜜桃臀| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 亚洲无线码一区国产欧美国| 国产女人操逼视频| 人妻少妇蜜桃视频欧美一区| 91超级碰| 97色婷| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 9 9精品一区二区三区| 亚洲色诱惑| 天天爱天天韩国日本牛牛牛牛| 婷婷久久网| 蜜臀久久久久久999|