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

ARTICLE DETAIL

資訊詳情

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

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

Python文件操作:os、pathlib與shutil的分工與實(shí)戰(zhàn)指南 說(shuō)實(shí)話很多人學(xué)了Python基礎(chǔ)語(yǔ)法之后第一個(gè)感覺(jué)自己會(huì)寫腳本了的時(shí)刻往往就是從文件操作開(kāi)始的——批量改名、整理下載目錄、按日期歸檔日志。但也是從這一刻開(kāi)始才真正體會(huì)到Python文檔里那三個(gè)庫(kù)的分家有多讓人迷惑操作文件用os處理路徑用os.path高級(jí)復(fù)制刪除又跳出來(lái)一個(gè)shutil到了Python 3.4之后還得加上pathlib。剛上手的時(shí)候我也是一頓混用同一個(gè)腳本里同時(shí)出現(xiàn)os.path.join和Path的情況比比皆是。這個(gè)主題看起來(lái)基礎(chǔ)實(shí)際上是幾乎所有自動(dòng)化腳本的地基。如果你能把os、pathlib、shutil這三者的分工和配合摸透后面寫爬蟲(chóng)存數(shù)據(jù)、寫數(shù)據(jù)處理腳本、寫自動(dòng)部署工具都會(huì)非常順手。這篇文章我會(huì)直接按實(shí)際開(kāi)發(fā)場(chǎng)景來(lái)拆不按文檔順序念重點(diǎn)講那些文檔里沒(méi)寫清楚、但你在真實(shí)工程里一定會(huì)撞上的問(wèn)題。1. 三個(gè)庫(kù)三個(gè)脾氣先分清os、pathlib和shutil誰(shuí)負(fù)責(zé)哪攤活1.1 剛上手時(shí)最容易犯的錯(cuò)把所有文件操作都塞進(jìn)os里os模塊是Python和操作系統(tǒng)交互的最底層接口它的定位非常廣環(huán)境變量、進(jìn)程管理、工作目錄、文件描述符什么都有。正因?yàn)樗裁炊脊苣阒苯佑胦s去操作文件時(shí)寫出來(lái)的代碼往往很啰嗦。比如判斷一個(gè)路徑是不是文件、再拿到它的文件名最傳統(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語(yǔ)言風(fēng)格的延續(xù)函數(shù)式、參數(shù)是字符串、返回也是字符串。你拼接路徑時(shí)得用os.path.join而且拼完之后得到的還是字符串后續(xù)想再取父目錄、改后綴名又得再調(diào)一層函數(shù)。邏輯一旦復(fù)雜起來(lái)滿屏的os.path.xxx嵌套讀起來(lái)非常累。1.2 pathlib的面向?qū)ο蟮降赘纳屏耸裁礀|西pathlib在Python 3.4引入它的核心思路很簡(jiǎn)單把路徑從字符串升級(jí)成對(duì)象。路徑不再是你要反復(fù)解析的原材料而是一個(gè)有方法、有屬性的實(shí)體。同樣是上面那段邏輯用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對(duì)象重載了/運(yùn)算符拼接路徑可以寫成data_dir Path(project) / data / report_2024.csv這比os.path.join(project, data, report_2024.csv)直觀得多。而且Path對(duì)象在Windows和Linux上都能正確處理分隔符你不需要關(guān)心當(dāng)前系統(tǒng)是反斜杠還是正斜杠。1.3 shutil是真正干重活的那個(gè)os負(fù)責(zé)指出文件在哪、是什么pathlib負(fù)責(zé)優(yōu)雅地描述路徑而真正執(zhí)行把文件從一個(gè)地方搬到另一個(gè)地方把整個(gè)目錄樹(shù)復(fù)制走刪除整個(gè)目錄這類重體力活的是shutil。它全稱是shell utilities設(shè)計(jì)目標(biāo)就是補(bǔ)齊os模塊在文件級(jí)操作上的短板。舉幾個(gè)最常見(jiàn)的對(duì)比操作os系列shutil刪除單個(gè)文件os.remove(path)os.remove本身夠了刪除非空目錄os.rmdir只支持空目錄shutil.rmtree可以遞歸刪除復(fù)制單個(gè)文件os.system(cp ...)這種不推薦shutil.copy2(src, dst)復(fù)制整個(gè)目錄樹(shù)基本要自己寫遞歸shutil.copytree(src, dst)移動(dòng)文件os.rename跨目錄經(jīng)常報(bào)錯(cuò)shutil.move(src, dst)用多了你就會(huì)發(fā)現(xiàn)凡是涉及目錄樹(shù)級(jí)別或者跨文件系統(tǒng)的操作直接找shutil準(zhǔn)沒(méi)錯(cuò)。它內(nèi)部已經(jīng)把很多邊緣情況處理好了比如跨設(shè)備移動(dòng)會(huì)先復(fù)制再刪除不會(huì)像os.rename那樣直接拋OSError。1.4 為什么現(xiàn)在新代碼推薦你用pathlib而不是os.pathpathlib是Python 3.6以后官方文檔推薦的首選路徑處理方式原因不只是語(yǔ)法好看。它在設(shè)計(jì)上解決了一個(gè)很實(shí)際的問(wèn)題路徑操作的組合性。字符串方式的os.path每一步函數(shù)返回的都是一個(gè)新的字符串你沒(méi)有一個(gè)穩(wěn)定的中間載體而Path對(duì)象本身就是一個(gè)載體你可以反復(fù)基于它做.parent、.joinpath()、.with_suffix()等操作代碼流程是連續(xù)的。當(dāng)然這不代表os沒(méi)用了。你要拿環(huán)境變量、要設(shè)置進(jìn)程工作目錄、要遍歷目錄樹(shù)拿底層文件描述符還是得用它。我的習(xí)慣是路徑描述和基本判斷用pathlib系統(tǒng)級(jí)交互用os文件批量操作用shutil。2. 路徑操作是最容易翻車的地方相對(duì)路徑、當(dāng)前目錄依賴病和不同操作系統(tǒng)的分隔符2.1 剛寫腳本時(shí)都犯過(guò)的病腳本一挪地方就找不到文件很多人寫腳本時(shí)圖省事直接用相對(duì)路徑with open(data/config.json, r) as f: config json.load(f)這段代碼能不能跑通完全取決于你運(yùn)行腳本時(shí)的工作目錄。如果你在項(xiàng)目根目錄運(yùn)行data/config.json能找到但如果你用IDE的調(diào)試功能、或者注冊(cè)成定時(shí)任務(wù)、或者從別的目錄調(diào)用這個(gè)腳本Python的當(dāng)前工作目錄變了這個(gè)相對(duì)路徑就立刻失效。報(bào)錯(cuò)往往是FileNotFoundError但你明明看到文件就在那里。正確的做法是基于腳本文件自身的位置來(lái)定位資源。pathlib提供了非常簡(jiǎn)單的方法from pathlib import Path BASE_DIR Path(__file__).resolve().parent config_path BASE_DIR / data / config.json__file__是當(dāng)前腳本文件的路徑.resolve()會(huì)把相對(duì)路徑轉(zhuǎn)成絕對(duì)路徑還能解析掉..和符號(hào)鏈接。之后無(wú)論你在哪個(gè)目錄下運(yùn)行這個(gè)腳本它都能找到自己旁邊的資源文件。這個(gè)習(xí)慣我從第二年開(kāi)始就一直保持再也沒(méi)有被文件找不到這種低級(jí)問(wèn)題坑過(guò)。2.2 相對(duì)路徑、絕對(duì)路徑和., ..這些隱藏陷阱Path(..)這類路徑看起來(lái)簡(jiǎn)單實(shí)際使用中很容易出問(wèn)題。比如你想找項(xiàng)目根目錄下的某個(gè)文件從子目錄往上一級(jí)兩級(jí)path Path(__file__).resolve().parent.parent / config.yaml這里連續(xù)兩個(gè).parent取決于你的目錄層級(jí)。一旦中間目錄結(jié)構(gòu)調(diào)整這個(gè)路徑就失效了。更穩(wěn)妥的辦法是從項(xiàng)目根開(kāi)始往下找# 假設(shè)倉(cāng)庫(kù)結(jié)構(gòu)repo/src/tools/gen_report.py # 要找 repo/config.yaml ROOT Path(__file__).resolve().parent.parent # 回到repo config_path ROOT / config.yaml另一個(gè)常見(jiàn)問(wèn)題是.resolve()和.absolute()的區(qū)別。雖然兩者絕大多數(shù)時(shí)候結(jié)果相同但.resolve()會(huì)額外解析符號(hào)鏈接和..把路徑洗成最直接的形式.absolute()則不會(huì)處理符號(hào)鏈接只是單純把相對(duì)路徑補(bǔ)全成絕對(duì)路徑。在大多數(shù)場(chǎng)景下直接用.resolve()更可靠。2.3 Windows路徑分隔符反斜杠那些反直覺(jué)的事Windows的路徑是用反斜杠分隔的比如C:\Users\name\Documents\file.txt。在Python字符串里反斜杠是轉(zhuǎn)義符所以你寫Windows路徑時(shí)要么寫成C:\\Users\\name要么寫原始字符串rC:\Users\name。用os.path.join或者pathlib的/運(yùn)算符本質(zhì)上是讓庫(kù)去處理分隔符差異。這里有個(gè)很坑的細(xì)節(jié)你用pathlib在Windows上拼路徑時(shí)得到的Path對(duì)象打印出來(lái)默認(rèn)是反斜杠樣式但如果你把它轉(zhuǎn)成字符串傳給其他程序某些程序只認(rèn)正斜杠。一個(gè)常見(jiàn)的處理是path_str str(Path(data) / file.txt).replace(\\, /)還有一個(gè)更隱蔽的問(wèn)題路徑中帶有空格。空格在大多數(shù)情況下沒(méi)問(wèn)題但一旦你把路徑拼進(jìn)命令字符串比如用subprocess調(diào)用外部命令就必須加引號(hào)否則命令會(huì)斷掉。用pathlib的resolve()通常能拿到絕對(duì)路徑但在拼命令時(shí)還是得手動(dòng)處理空格。2.4 中文文件名和Unicode規(guī)范化問(wèn)題中文文件名在現(xiàn)代Python 3中基本沒(méi)有障礙路徑可以直接用中文字符串。但如果你處理的文件是別人上傳的文件名來(lái)源五花八門可能會(huì)出現(xiàn)Linux的UTF-8編碼和macOS的NFC/NFD規(guī)范化不一致的問(wèn)題。具體表現(xiàn)是你用Path(報(bào)告.pdf)去匹配明明文件存在但if path.exists()返回False。這是因?yàn)閙acOS的文件系統(tǒng)用NFD分解形式存儲(chǔ)文件名而很多其他系統(tǒng)用NFC組合形式兩者從視覺(jué)上看一模一樣但編碼字節(jié)不同。如果你需要處理這類場(chǎng)景可以考慮用第三方庫(kù)unicodedata做規(guī)范化對(duì)齊或者干脆用模糊匹配。不過(guò)說(shuō)實(shí)話我自己遇到最多的還是Windows共享文件夾里的中文路徑這時(shí)基本上直接用pathlib也能搞定真正麻煩的是跨系統(tǒng)共享時(shí)編碼不一致。3. 目錄遍歷與文件篩選不靠記憶寫遞歸靠這三招掃目錄3.1 os.walk是全能但啰嗦的老牌選手批量處理文件時(shí)最常做的事就是把目錄樹(shù)整個(gè)逛一遍。os.walk是Python里最傳統(tǒng)的做法它會(huì)遞歸遍歷目錄每到一個(gè)目錄都返回三個(gè)值當(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)這套寫法本身沒(méi)問(wèn)題但你可以看到root、dirs、files是三組平行的數(shù)據(jù)結(jié)構(gòu)你需要自己去os.path.join拼完整路徑。遍歷過(guò)程中如果想改變dirs的值來(lái)控制要不要進(jìn)入某個(gè)子目錄也容易出錯(cuò)。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é)尾的所有層級(jí)的文件返回的直接就是Path對(duì)象不需要手動(dòng)拼接。如果想匹配任意子目錄下的特定文件還可以寫# 匹配所有子目錄下的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模式里那些微妙語(yǔ)法*、**、?和字符集glob模式本質(zhì)上是一種簡(jiǎn)化版的正則表達(dá)式不是完整的正則。最容易混淆的是*和***.log匹配當(dāng)前目錄下所有以.log結(jié)尾的文件*不跨目錄層級(jí)**/*.log在glob方法里可以跨層級(jí)匹配在rglob里寫**/*.log和直接寫*.log效果其實(shí)相同因?yàn)閞glob本身就是遞歸的?匹配單個(gè)任意字符比如report_?.csv能匹配report_1.csv但匹配不到report_10.csv[0-9]字符集匹配比如file_[0-9].txt我個(gè)人在實(shí)際項(xiàng)目中更傾向于用rglob加寬泛的匹配條件然后在循環(huán)里用Path對(duì)象的屬性做二次篩選。這樣比精心編寫glob模式更易讀也更好維護(hù)。3.4 按擴(kuò)展名、修改時(shí)間、文件大小篩文件的完整套路真正篩選文件時(shí)很少只靠擴(kuò)展名一種條件。比如清理超過(guò)30天的日志文件保留最近3天的備份找出大于100MB的臨時(shí)文件。pathlib做這類組合篩選非常順手import time from pathlib import Path base Path(/var/logs) cutoff time.time() - 30 * 24 * 60 * 60 # 30天前的時(shí)間戳 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是最后修改時(shí)間戳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()每次都會(huì)發(fā)起一次系統(tǒng)調(diào)用如果文件列表特別長(zhǎng)性能會(huì)明顯下降。對(duì)于幾千個(gè)文件這個(gè)量級(jí)沒(méi)什么問(wèn)題但如果上百萬(wàn)文件建議先os.scandir拿底層數(shù)據(jù)再篩。4. 復(fù)制、移動(dòng)、重命名、刪除shutil高頻操作里的異?,F(xiàn)場(chǎng)4.1 拒絕訪問(wèn)os error 5到底哪來(lái)的這個(gè)錯(cuò)誤基本是Windows環(huán)境專屬但它出現(xiàn)的原因五花八門。最常見(jiàn)的是目標(biāo)文件被另一個(gè)進(jìn)程鎖住了。比如你用Excel打開(kāi)了某個(gè)xlsx文件然后腳本要去覆蓋它Windows會(huì)直接拒絕報(bào)PermissionError: [Errno 13] Permission denied有時(shí)候錯(cuò)誤信息里會(huì)帶os error 5。Linux下對(duì)應(yīng)的是權(quán)限位不足但Windows下更多是文件占用。還有一種情況是目標(biāo)目錄沒(méi)有寫權(quán)限。比如把文件復(fù)制到C:\Program Files這種系統(tǒng)受保護(hù)目錄普通權(quán)限下會(huì)被拒絕。解決辦法有兩種思路如果是文件被占用先找到占用進(jìn)程并關(guān)閉它或者讓腳本自動(dòng)重試如果是權(quán)限不足需要以管理員身份運(yùn)行或者修改目標(biāo)目錄的ACL我給個(gè)實(shí)用的重試封裝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ù)制...)這個(gè)函數(shù)在文件被Excel或其他程序短暫占用時(shí)很管用比如從共享目錄批量拉取文件時(shí)Office套件常常短暫鎖定文件。4.2 shutil.copy、copy2、copyfile三兄弟的區(qū)別shutil提供三個(gè)復(fù)制函數(shù)很多人不清楚差異直接導(dǎo)致復(fù)制出來(lái)的文件缺失元數(shù)據(jù)。它們的區(qū)別如下函數(shù)復(fù)制內(nèi)容是否保留權(quán)限是否保留時(shí)間戳目標(biāo)可以是目錄shutil.copyfile只復(fù)制文件內(nèi)容否否否shutil.copy文件內(nèi)容 權(quán)限部分否是shutil.copy2文件內(nèi)容 權(quán)限 元數(shù)據(jù)是是是我的經(jīng)驗(yàn)是絕大多數(shù)場(chǎng)景直接用copy2因?yàn)樗M量保留文件的修改時(shí)間和訪問(wèn)時(shí)間在備份、歸檔類腳本里非常重要。如果備份后還需要用類似rsync的思路對(duì)比文件差異時(shí)間戳的存在能省去很多麻煩。copyfile適合那種只要內(nèi)容、別的都不管的極端場(chǎng)景。還要注意copy2和copy都允許dst參數(shù)是一個(gè)目錄這時(shí)會(huì)保留原始文件名而copyfile要求dst必須是完整的文件路徑。4.3 shutil.move跨目錄和跨文件系統(tǒng)時(shí)的行為差異shutil.move是移動(dòng)文件的推薦函數(shù)但它內(nèi)部邏輯會(huì)讓很多人困惑文件在同一個(gè)文件系統(tǒng)內(nèi)時(shí)它直接調(diào)用os.rename速度快但跨文件系統(tǒng)時(shí)它會(huì)先復(fù)制再刪除速度慢而且需要臨時(shí)空間。一個(gè)容易踩的坑是shutil.move的dst參數(shù)如果是已存在的目錄文件會(huì)被移進(jìn)這個(gè)目錄如果是一個(gè)文件路徑那就是重命名。寫代碼時(shí)最好明確意圖from pathlib import Path import shutil src Path(/tmp/data/report.csv) target_dir Path(/backup/2024/) target_dir.mkdir(parentsTrue, exist_okTrue) # 明確要移動(dòng)到目錄中 shutil.move(str(src), str(target_dir / src.name))另一個(gè)常見(jiàn)問(wèn)題是目標(biāo)目錄不存在。shutil.move不會(huì)自動(dòng)創(chuàng)建目標(biāo)目錄如果目標(biāo)路徑的父目錄不存在它會(huì)拋FileNotFoundError。所以移動(dòng)之前一定要先mkdir(parentsTrue, exist_okTrue)。4.4 批量重命名時(shí)如何保住文件安全先演練再動(dòng)手批量重命名是文件操作腳本里最容易翻車的場(chǎng)景。我吃過(guò)最大的虧是重命名時(shí)新舊文件名有交叉處理到一半文件已經(jīng)改名了后續(xù)的源文件路徑失效。核心原則有兩條先把所有操作列成計(jì)劃再統(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跳過(guò)目標(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()生成同名目錄下的新文件名比手動(dòng)拼接父路徑靠譜得多。另外建議在重命名前先打印所有計(jì)劃給自己一個(gè)最后檢查的機(jī)會(huì)。搞批量操作時(shí)寧可慢一點(diǎn)也別一股腦跑完再發(fā)現(xiàn)全亂了。4.5 刪除操作的后悔藥別直接rmtree大多數(shù)人刪除文件時(shí)直接os.remove或shutil.rmtree這當(dāng)然沒(méi)問(wèn)題但我在處理重要數(shù)據(jù)時(shí)習(xí)慣先做一個(gè)軟刪除把文件移動(dòng)到臨時(shí)回收目錄而不是直接刪。這樣萬(wàn)一手滑刪錯(cuò)了還能救回來(lái)。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 # 如果回收站已有同名文件加時(shí)間戳避免覆蓋 if dst.exists(): dst TRASH_DIR / f{path.stem}_{path.stat().st_mtime}{path.suffix} shutil.move(str(path), str(dst))這個(gè)軟刪除策略配合定時(shí)清理腳本既安全又不會(huì)讓回收站無(wú)限膨脹。特別是批量清理日志、臨時(shí)文件時(shí)強(qiáng)烈建議先軟刪除觀察幾天確認(rèn)沒(méi)問(wèn)題再物理清除。5. 讀寫文件時(shí)的編碼與內(nèi)容處理亂碼不只是加個(gè)encoding那么直白5.1 用Path.open還是open以及with語(yǔ)句的必要性讀寫文件最簡(jiǎn)單的方式是內(nèi)置的open()但如果你已經(jīng)在用pathlib處理路徑直接用Path.open()會(huì)更統(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()兩者其實(shí)沒(méi)本質(zhì)區(qū)別Path.open就是幫你把路徑轉(zhuǎn)成字符串再調(diào)內(nèi)置open。真正要強(qiáng)調(diào)的是with語(yǔ)句。忘了with會(huì)導(dǎo)致文件句柄不釋放Windows上最直接的后果就是文件被占用、后面想刪都刪不掉。這也是很多os error 5的根源之一腳本運(yùn)行完進(jìn)程還在文件句柄還占著后續(xù)操作全失敗。5.2 Python 3的open默認(rèn)編碼為何會(huì)坑你Python 3里open()打開(kāi)文本文件時(shí)默認(rèn)編碼取決于系統(tǒng)區(qū)域設(shè)置。Windows中文系統(tǒng)通常是gbkLinux通常是utf-8。這意味著同樣一段代碼在Windows上可以正常讀中文文件但部署到Linux上可能直接拋UnicodeDecodeError。最穩(wěn)妥的做法是每次打開(kāi)文本文件都顯式指定encodingutf-8除非你能確定文件確實(shí)不是UTF-8。對(duì)中文環(huán)境來(lái)說(shuō)老系統(tǒng)傳下來(lái)的txt文件經(jīng)常會(huì)帶著GBK編碼處理這些文件時(shí)需要格外小心可能在讀取時(shí)就得指定encodinggbk。判斷文件實(shí)際編碼推薦用chardet庫(kù)做個(gè)初步猜測(cè)import chardet def detect_encoding(path): raw path.read_bytes()[:4096] result chardet.detect(raw) return result[encoding] or utf-8注意chardet不是百分百準(zhǔn)確尤其是對(duì)短文本。我的做法是先嘗試utf-8失敗后回退到gbk再不行才用chardet。5.3 BOMUTF-8文件里藏著的三個(gè)不可見(jiàn)字符另一個(gè)高頻坑是UTF-8 BOM。某些Windows程序特別是老版記事本保存UTF-8文件時(shí)會(huì)在文件開(kāi)頭寫入一個(gè)\xef\xbb\xbf的BOM標(biāo)記。Python讀取時(shí)如果不處理字符串開(kāi)頭會(huì)包含這個(gè)不可見(jiàn)字符導(dǎo)致if content.startswith(---)這種判斷失效。修復(fù)方法很簡(jiǎn)單用utf-8-sig編碼讀取with path.open(r, encodingutf-8-sig) as f: content f.read()utf-8-sig讀取時(shí)會(huì)自動(dòng)跳過(guò)開(kāi)頭的BOM。但要注意寫入時(shí)用不用utf-8-sig要看你的下游工具。如果文件是給新程序用的用utf-8就行別主動(dòng)加BOM如果是給老Windows程序用加BOM反而保險(xiǎn)。5.4 大文件別用read()一次性讀完搞懂緩沖區(qū)新手最容易犯的錯(cuò)是讀大文件時(shí)直接read()一個(gè)幾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ū)大小。如果你的腳本頻繁讀寫大量小文件還有一個(gè)性能優(yōu)化點(diǎn)把多個(gè)文件的讀寫邏輯合并減少系統(tǒng)調(diào)用次數(shù)。比如需要批量改文件內(nèi)容時(shí)不要每改一個(gè)就開(kāi)關(guān)一次文件句柄先全部讀取到內(nèi)存中處理完再一次寫回。6. 生產(chǎn)環(huán)境里的防御式文件操作異常層次、競(jìng)態(tài)與健壯代碼風(fēng)格6.1 異常金字塔FileNotFoundError、PermissionError和OSError的家族關(guān)系文件操作最常見(jiàn)的異常有三個(gè)FileNotFoundError、PermissionError、IsADirectoryError。它們都是OSError的子類這是理解異常捕獲邏輯的關(guān)鍵。try: shutil.copy2(src, dst) except FileNotFoundError: print(f源文件不存在: {src}) except PermissionError: print(f沒(méi)有權(quán)限訪問(wèn): {src} 或 {dst}) except OSError as e: print(f其他操作系統(tǒng)級(jí)錯(cuò)誤: {e})捕獲順序是從具體到一般。如果你先寫except OSError后面的FileNotFoundError分支永遠(yuǎn)走不到。我見(jiàn)過(guò)不少同事在這個(gè)順序上栽跟頭。6.2 先檢查再操作的競(jìng)態(tài)問(wèn)題文件在兩次調(diào)用之間可能消失很多新手習(xí)慣這樣寫if path.exists(): path.unlink()這個(gè)寫法有一個(gè)微妙的競(jìng)態(tài)問(wèn)題exists()和unlink()之間文件可能被其他進(jìn)程刪掉或者新建。如果文件在這兩步之間消失unlink()會(huì)拋FileNotFoundError。生產(chǎn)環(huán)境下的文件操作永遠(yuǎn)要假設(shè)文件系統(tǒng)是動(dòng)態(tài)的。更好的做法是直接操作捕獲異常這就是Python提倡的EAFP風(fēng)格Easier to Ask for Forgiveness than Permissiontry: path.unlink() except FileNotFoundError: pass # 文件本來(lái)就不存在目的已達(dá)到這種風(fēng)格寫起來(lái)更健壯也減少了系統(tǒng)調(diào)用次數(shù)。同理創(chuàng)建目錄時(shí)用mkdir(parentsTrue, exist_okTrue)而不是先判斷exists()再?zèng)Q定要不要?jiǎng)?chuàng)建。6.3 冪等操作設(shè)計(jì)讓腳本可以放心跑第二次所謂冪等是指執(zhí)行一次和執(zhí)行兩次效果相同。日志清理腳本、備份腳本、臨時(shí)文件整理腳本都應(yīng)該設(shè)計(jì)成冪等的否則你第二次運(yùn)行時(shí)會(huì)因?yàn)槲募呀?jīng)不存在而出錯(cuò)。以清理超過(guò)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這個(gè)參數(shù)它會(huì)讓rmtree忽略文件不存在、權(quán)限不足等問(wèn)題非常適合冪等清理場(chǎng)景。當(dāng)然也要注意別因?yàn)閕gnore_errors掩蓋了真正的問(wèn)題在重要操作里還是顯式處理異常比較好。6.4 網(wǎng)絡(luò)共享目錄那些讓人抓狂的延遲和占用處理Windows共享目錄或NAS掛載點(diǎn)時(shí)文件操作會(huì)表現(xiàn)出一些本地目錄沒(méi)有的問(wèn)題網(wǎng)絡(luò)延遲導(dǎo)致操作超時(shí)、文件被其他用戶鎖定、路徑訪問(wèn)時(shí)斷時(shí)續(xù)。我的經(jīng)驗(yàn)是對(duì)網(wǎng)絡(luò)路徑的操作要合理地重試但絕不能無(wú)限重試。上面那個(gè)copy_with_retry模式再擴(kuò)展一下加上超時(shí)上限和日志輸出就能變成可靠的生產(chǎn)代碼。另外網(wǎng)絡(luò)路徑上盡量別用shutil.rmtree文件太多時(shí)可能異常緩慢優(yōu)先考慮分批刪除。6.5 實(shí)操收尾我個(gè)人的文件操作代碼習(xí)慣寫了這么多年文件操作腳本總結(jié)了幾條自己一直堅(jiān)持的習(xí)慣第一所有腳本開(kāi)頭都用Path(__file__).resolve().parent定位基準(zhǔn)目錄絕不依賴運(yùn)行時(shí)的當(dāng)前工作目錄。第二所有文本讀寫都顯式指定編碼utf-8為默認(rèn)特殊情況再說(shuō)。第三所有批量操作先打印計(jì)劃再執(zhí)行寧可多花五秒看輸出也不要一失手刪掉一堆文件。第四所有刪除操作都先軟刪除到回收目錄觀察幾天再物理清除。這幾條習(xí)慣沒(méi)有一條是高級(jí)技巧但每一條都幫我在真實(shí)項(xiàng)目里避免過(guò)災(zāi)難性的故障。文件操作這活看著簡(jiǎn)單出的問(wèn)題往往是最隱蔽、最難以恢復(fù)的——文件刪了可以重新下載但配置覆蓋錯(cuò)了可能直接讓服務(wù)起不來(lái)。拿捏好os、pathlib、shutil這三個(gè)庫(kù)的分工再把這些防御式的習(xí)慣融入代碼里你寫的文件處理腳本就能從本地跑通升級(jí)成生產(chǎn)可靠。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久久555| 熟妇视频一区二区三区在线| 欧亚免费视频| 亚洲 小说 欧美 激情 另类| 后入式五六区| 青草影院内射高潮| 好吊色一区| 全免费a敌肛交毛片免费| 国内毛片欧美香蕉精品| 国产午夜精品一区二区三区牛牛| 人妻少妇色综合| 九九AV| 黄片免费看的| 69av一区二区三区| 9丨久久九九九| 欧美色图下一页| 亚洲操操| 国产精品自产拍在线观看社区| 免费一级毛片在线视频观看| 综合久久97| 亚州Av天美传媒| 嗯嗯啊啊啊好舒服| 丰满人妻一区二区三区四 | 色婷婷六月| 亚洲色图日韩精品| 国产精品无码久久久久2025| 精品欧美不卡在线播放| 色吧91| 中文字幕黄色一起草| 国产人妻精品一区二区三区秋霞 | 日韩亚洲欧美中文字幕| 蜜臀AV午夜精品久| 粉嫩av一区二区三区天美传媒| 久久精品电影| 欧美,日韩,中文,另类| 日本超碰97日韩精品人妻| 91久久国产综合久久| 婷婷色婷婷| 五月婷婷六月丁香| 素人播放一区| 日韩偷拍色图| 日韩少妇丰满亚洲| 亚洲日韩久久精品一区| 亚洲情色无码一区二区三区| 人人妻人人爽| WWW.操逼.COM| 久久黄色视频一区二区三区| 韩日性爱av| 人妻81p| 日本性爱网址| 丁香六月啪啪| 91视频成人福利网站在线一区| 亚洲精品丝袜| 加勒比综合a∨| 欧美激情 亚洲色图| 伊人性在线视频| 91岛国动作片| 色翁荡息又大又硬又粗又爽| 色情乱伦AV| 黄片在线免费在线观看| 91精品成人| 久久日本熟女精品一区| 91中文字幕在线观看| 九九久久国产精品怡红院| 校园春色美腿丝袜 | 国产精品经典一卡久久久| 打av高清| 四虎免费视频| 中文字幕精品探花视频| 国产乱色国产精品免费视| 黄页视频网站野外| 五月天黄色av| 韩日巨乳美女免费视频在线观看| 亚州性色| 在线可观看的黄色网址| 日欧美色| 粉嫩av一区二区三区天美传媒 | 欧美黑人猛交春色影视大全| 成人黄页| 亚洲āv网址在线观看| 乱伦a片视频| 一起草精品人妻| 99.色网| 日本孕妇孕交| V A在线| 欧美性爱伊人| 中文字幕少妇色 | 91性高潮久久久久久久久| 91九色丨风韵犹存| 黄色片A级一区二区三区| 欧美熟妇乱码在线一区| 欧美视频一| 偷拍五区| 裸体1区| 乱伦3P视频| 亚洲综合中文字幕有码| 97资源超碰| 密臀国产在线| 91一起操| 91亚洲黑人| 性在久久久久久| 91国产在线精品| 婷婷激情四射| 欧美色综合| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 日韩激情啪啪| 一区二区三区看视频| 99碰碰| 屁股久久久久久久久久| 中文字幕在线2| 黄aaaaaaaaaaaaaaaaaa色网站| 青草园大香蕉| 女人的久久久| www.色五月| 一区操逼| 日本视频在线中文字幕| 精品国产国产AV| 色婷婷小说| 天天看天天日天天操| 99啪啪| 丁香九月婷婷| 留下AⅤ黄色片| 天天躁日日躁成人字幕aⅴ| 亚洲色婷婷综合久久久久中文| 婷婷五月成人| 男人的天堂2019AV| 熟妇在线视频一区二区| 久久久婷婷| 美女自卫慰黄网站免费| 日韩色欲久久一二三四区| 国产欧美日本亚洲精品| 国产亚洲精品无码三区| 国产呦精品一区二区三区下载| 国产精品无套内谢| 乱伦熟女区| 极品白嫩美女白浆成人福利在线看| 人人玩人人添人人澡免费| 91被操| 九九视频黄色片| 视频黄色国产一级| 超碰99热| 嗯嗯啊啊用力视频免费| com 首页 18岁 禁区 女优 免费 精选 同城| 大香蕉伊人在线成人AV在线观看| 亚洲伊人久久精品影院| 欧美成97爱| 91人人| 久久精品国产亚洲妲己影视| 亚洲码专区| 黄片免费看黄片免费看| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 久久久免费一级黄片| 男男H黄动漫啪啪无遮挡网站| 97久久国产精品| 久草线上视频免费看| 成人国产视频在线观看| 久久亚洲婷婷| 91久精品| 操老熟女AV| 久久久九| 91高清日| 精品久久青青草| 在线 欧美 亚洲| 久热一区二区| 综合色图,成人综合网| 亚洲色图 综合| 尤物av网站免费在线播放| 超97在线精品视频| 国产一区二区三区不卡手机在线| 天天干夜夜| 无码精品久久| 97视频在线视频| 大香蕉一级黄色片久久| 看日韩美女二区三区免费操逼视频 | 91国产大片| 情色大香蕉| av天堂5| 人妻一区久久二区三区色播| 极品国产内射| 精品人妻一区二区免费蜜桃| 欧美黄色手机在线观看| 大香蕉宅男伊人| 91欧美在线| 欧美有码亚洲中文字幕一区二区三区四区| 屁股久久久久久| 蜜臀精品1区2区| 欧美性生活男人的天堂| 免费精品福利在线观看| 国产精品97视频| 800zy一区二区| 襙一襙| 欧美三级一级| 日韩一级特黄av毛片| 97干在线| 欧美刺激色黄片免费看| 天天干人人乐| 天天天天天天天天综合| 日韩AC| 伊人网高清| 99999精品成人| 欧美系列在线一区二区| 亚洲色图欧洲| laoshunv91| 99碰碰| 国产成人亚洲精品无码最新在线| 新怡红院| 麻豆伊人网| 国产11页| 国产福利精品最新在线| 国产成人午夜视频网址| 男人天堂欧美| 久久精品区| 啊啊啊在线观看免费视频| 岛国精品视频在线观看| 日韩色欲久久一二三四区| 国内一区二区免费| 美女网站91| 天天天做天天天爱天天天爽| 麻豆久久久久久久久丝袜| 五月丁香在线| 97二区四区| 综合欧美激情网| jazzjazz国产精品麻豆| 男人午夜天堂| 国产精品人妻无码久久久老鸭窝| 91n欧美| 欧美精品激情| 一起草视频在线| AV女资源| 麻豆天美91| 久久久久久九九九九九| 久久少妇| 欧美十八禁视频| 岛国黄片网站| 一区二区三区视频| 一区二区三区高清 | 九九九九热| 超碰美国| 亚洲 中文字幕 精品| 97伦综合| 国产精品美女久久久久久网站| 午夜爽爽爽| 国产情色第一第二页在线观看| 1024亚洲中文字幕久在线看片你懂的| 亚洲nv男人的天堂网| 无码聚合| 色婷婷色99国产综合精品| 激情小说成人日本无码一| 亚洲成人免费中文字幕| 97资源视频| av三级电影在线播放| A片 AV一级在线播放观看免费| 午夜精品久久久久久久第一页按摩| 骚女天天综合网| 日韩少妇一区二区三区| 欧美狠狠弄| 亚州综合在线| 五月天加勒比啪| PMv在线观看| 五月天开心网| 亚洲无码一区成人免费午夜| 亚欧成人中文字幕一区| 久久中出在线| www.久久制服糖| 欧美三级不卡| 久99| 欧美色图20P| 99热综合| 日日躁夜夜躁狠狠躁超爽| 亚洲古典另类欧美在线| 后入式五六区| 国产小u女在线观看| 黄久在线| 这里有精品| 无码人妻1727| 久久精品老司| 牛牛操视频逼| 日韩精品区二区三区不卡| 99日韩| 97色97干| 美国一区二区三区视频| 欧美片第一页| 日韩av在线精品观看| 四虎视频在线观看| 亚洲啪啪视频一区二区| 91精品久久久久五月天精品| 色五月婷婷久久| 亚洲有码 欧美精品| 亚洲图片激情小说| 综合干干干av久久久综合网| 久久精品日韩| 久久久三区二区一区| 婷婷久久五月天| 俺去啦俺来也久久综合| 91老熟女老女人国产老太| 91精品啪在线观看国产城中村| 亚洲男人天堂网站| 大香蕉中文aV在线| 国产精品激情久久久久久久| 国产农村妇女毛片精品久久| 欧美综合1性辶| 大香蕉男女超碰精品在线| 97se综合网| 欧美成人一级免费电影| 久久超碰日韩精品| 密臀视频一区二区三区| 欧美亚洲中文字幕| 亚洲欧美色图小说| 性色av一区二区| 国人欧美精品一区二区| 男女一进一出视频久久| 国产精品999zyz| 上海一级黄片| 乱操乱伦AV| 亚洲国产精品久久久久久久久久| av天堂精品久久| 美女露胸露奶头| 色色毛片| 欧亚第一综合网| 亚洲欧美色图小说| AV男人天堂网| 成人五月香网在线| 丝袜熟女一区二区三区| 制服中出中文人人精品| 日本午夜久久电影| 亚洲欧美首页| 成人日韩中文字幕| 99久久久无码国产精品性男| 男人天堂毛片| 伊人久久大香线综合无码| 中文字幕人成乱码熟女香港| 死我十八禁| 日韩性爱视频免费在线| 家庭乱伦麻豆| 超碰在97| 欧美一区二区情色| 日本在线不卡v二区| 欧美天天综合在线| 日本999精品视频| 囯产操逼片| 伊人超碰97| 99精品人人爽| 中文字幕高清20页视频| 国产操伦| 天天狂操夜夜狂日| 蜜桃臀久久| 激情文学网伊人| 免费一级a毛片久久久久久鸭绿欲 国产精品亚洲天堂网址 | 日本顶级天天操狠狠操夜夜操中文字幕| 另类小色呦| 超碰97国产欧美| 色香在线| 极品色社| 日本123区操B视频| 亚洲图片色图欧美另类| 在线不欧美| 狠操91,com| 九九视品黄色| 亚洲女毛多水多21P| 国产辣妈在线视频福利| 久久超碰日韩精品| 亚洲欧美视| 亚洲美欧999| www.丁香五月| 国产在线视视频有精品| 久久久久久久九九九九九九| 日日爱99| 桑老女人九区| 中文字幕熟女人妻丝袜丝| 青青草手机在线免费观看| 色欲天天综合网| 操逼操逼逼操操逼91| 97干色| 素人伊尹大香蕉免费下载视频| 欧美 中文字幕 一区| 婷婷久久综合久| 亚洲无码久久久久久久| 国产AV激情无码久久无码| 亚洲综人| 毛片麻豆91糖心精品毛情片| 日韩青久久| 1204金沙人妻懂旧版免费| 大香蕉欧美伊| 欧美性色综合网| 欧美日韩国产中文精品字幕自在自线,| 亚洲国产一级精品毛一级精品看免费视频 | 免费人人搞97| 欧美日韩情色一区二区| 精品无码一区二区| 97超碰逼| 欧美亚洲20p| 黑人中出21连凳花野真衣| 一区二区三区精品黑丝白丝酒店对鸡 | 久久精品小视频| 日本天天色| 激情五月天色播| 偷窥自拍亚洲天堂网爆| 欧苏综合色综合| 午夜天堂啪啪| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 久啪视频| 青草成人免费视频一COm| 欧美激情区| 人妻精品一区二区| 草草电影院| 狠狠操狠狠操操| 岛国福利在线精品播放| 人人操我人人干| 成人午夜小视频手机在线看| 岛国网址国产 | 操逼操操操91| 亚洲精品三| 殴美性色a级欧美| 久久AV无码1区2区3区| 色诱中文字幕| 久久亚洲日韩熟女精品| 中文久久久| 亚洲精品一区二区精品| 自拍偷拍 日韩无码| 国产丝袜视频| 热久久99999| 色婷婷日韩精品一区二区三区| 欧美综合在线第一页| 综合 亚洲 欧美| 91看黄片| 日本三级日本三级99| 久久9精品视频| 美女91在线观看| 色欲久久99精品久久| 麻豆亚洲AV成人无码久久精品| 人人看黄色视频| 欧美黄片欧美黄片xxx| 五月天激情综合网| 狠色婷婷久久一区二区三区_| 熟女91网| 欧美伊人久久综合网| 亚洲熟女av日韩熟女| 67914亚洲精品| 国产视频大全| TS人妖另类精品视频系列| 亚洲免费成人精品电影| 校园春色亚洲欧洲| 99色在线| 五月丁香拍拍激情综合三级| 欧美超碰9798| 亚洲色图欧美色18直播在线| 亚洲欧洲中文日韩女优乱码| 天天舔天天| 十八禁一区二区无码观看| 国产后入| 日韩三级久久久| 夜夜操一区二区| 中文字幕久久婷婷丁香五月天| 女人被男人桶爽视频网站| 亚洲av夫妻操穴网| 一卡二卡在线播放| 加勒比久久综合网高清| 日韩三级在线观看mp4| 黄骗免费网站| 人人摸人人添人人操| 日韩紧密久久| 国语av狠狠色丁香婷婷综合激情| 国产精品视频精品一二| 人妻天天爽| 亚洲国产91精品一区二区久久| 99久久这里只有精品| 欧美专区17页| 欧美白嫩在线放| 日日骚精品视频| 国产精品久久久久久亚洲色欲| 国内91熟女人妻丝袜天天精品视频在线| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 亚洲AV成人无码一区二区三区在线观看 | 国产第二页| 日本αv| 亚熟在线| 欧美97免费| 欧美日韩操逼嗦吊| 密臀成人视频久久久| 黄色大香焦1级‘′‘| 色网综合网| 天堂а√在线最新版在线| 欧美久久婷婷| 巨乳特殊服务按摩| 日本中文字幕在线电影| 精精品人妻一区二区三区| 日本日皮视频逼| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 欧美日韩国产色图在线| 性生活性生大爱77AV国产| 国产理论视频在线播放| 99热这里都是精品| 26uuu国产免费观看| 91黑丝操| 韩国黄色片精品久久久| 亚州性色| 麻豆久久久久久久久丝袜 | 天天狠操| 免费视频观看60秒| 人妻熟女一区在| 乱伦熟女论坛| 粉嫩绯色AV一区二区在线| 国产欧美成人精品| 五月丁香啪啪啪| 亚洲情色电影网| 欧美大战久久久伊人| 一二三啪啪专区| 亚洲乱色熟女一区| 福利视频香蕉免费一区二区在线| 精品人人插人人操| 欧美精品人妻视频| 久久超碰天天| 欧美老妇女内射网址| 久久久久亚洲| av橘色网站| 91在线视频免费中出| 婷婷人妻激情| 逼操网站| 日天天九九天堂666| 夜夜狼人妻| 国产精品在线一区二区| 欧美一级黄色免费专区| 97久久精品亚洲| 男人天堂毛片| 夜夜高潮夜夜爽高清视频一| 天天躁日日躁AAAXX| av 模特一区了| 夜夜操夜夜高潮夜夜爽国产精品区| 国产操操日韩三级黄| 亚洲男人久久综合天堂| 十八禁电影伊人网| 日韩AV一区二区三区三州三州| 亚洲导航深夜福利| 亚洲资源站| 亚洲熟妇综合久久久久久| 热久久这里只有精品| 人妻丰满熟妇一区二区三| 九九热re99re6在线精品| 歐美性天天| 97精品国产97久久久久久户外免费| 免费观看国产不卡av| 中文字幕在线观| 97在线观看免费| 久久国模av| 欧美天天拍| 可以免费观看的AV| 色婷网| 欧美大波激情xxxx| 超碰欧美| 酒色综合网| 色臀AV| 久久视频,这里只有精品| 日日骚 av| 蜜桃精久三区| 精品熟女一区=区三区| 五月色综合| 在线观看国产黄色| 国产剧情AV不卡在线观看| 少妇熟女1区2区3区| 日本韩高清无砖码22o| 91亚洲情色| 欧美少妇高潮视频| 综合五月天| 热G综合热G中文| 婷婷五月天色网| 亚洲精品第一| 国产美女高潮叫床视频| 亚洲av无码成人精品国产| 国语国产操逼伊人AV网| 欧美图片偷拍| 99综合视频一体| 婷婷五月天伊人| 成人资源中文字幕在线观看天天| 国产精品久久久久av| 超碰国产在线| 超碰97起碰| 啪啪91| 国产原创精品| 欧美一区二区成人一卡| 另类视频在线| 大香蕉日韩欧美| 综合网 欧美| 女沟厕偷窥piss小便| 欧美操人视频| 能在线播放的国产三级| 抽插无码高清一区| 日本精品五区| 2018天天干在线视频| 久久精品国产96精品亚洲拳交| 日韩一区二区高清在线观看的| 伦理片秋霞免费影院| 亚洲av强奸乱伦| 啊啊啊啊啊在线观看网址| 一级黄碟在线观看| 精品少妇人妻| 性色A∨91| 肏逼福利网站| 日韩一区二区高清在线观看的| 超碰AV在线| 久久欧美按摩999| 久久久久亚洲精品| 亚洲淫乱骚妇AV| 日韩高清一二三| 亚洲综合伊人无码久久| 国产强奸无码乱伦| 人人操人人摸人人看人人干| 中文字幕精品一区欧美| 一级免费啪啪片| 国产日本熟女顶级一区二区三区视频| 刺激精品视频| 亚洲人妻久久| 天天操天天干一区二区 | 亚av顶级裸体一区二区三区四区五区 | 国产网红精品| 日韩 人妻 精品| 激情五月天校园春色网| 立川理惠被中出无码| 日韩国产中文字幕| 懂色AV中文| 91网站18禁| J?P?NESEHD熟女熟妇伦| 99操逼| 成人在线午夜视频一区| 欧美在线啊啊| 免费看一级a性色生活片久久无| 亚洲人在线| 91无码精品| 欧美大香蕉专区网| 97资源制服丝袜| 啊啊啊啊好疼视频| 久久无码成人| 久久精品视频久久久| 国产激情在线| 国产免费一区在线观看| 鸥美插入视频| 88xx成人精品视频| 国产精品久久久视频| 欧美日韩精品久久久久东北老熟妇| 性色av大全| 国产999精品久久久久久| 夜夜嗨一区二区三区三州加勒比| 涩涩涩综合| 91伊人影视综合| av黄图片在线观看| 色一射色一射| 亚洲高清综合网| 欧洲色色| 亚洲精品97| 97色婷婷| JuliaAnn丝袜熟女系列| 国产亚洲禁久一区二区| 亚洲中文字幕一区| 蜜乳av首页| 丝袜美腿射精91| 性爱乱伦网址| 久久影视二区三区行押| 日韩人妻中文视频| 久久9免费视频| 26uuu国产成人综合| 亚洲精品黑丝| 亚洲精品日日夜夜52| 欧美日韩国产色五月综合在线| 国产精品无码av在线 | 狠久久| 99色在线| 久久免费少妇| 午夜天堂精品久久| 性爱边摸边日免费AV| 高潮综合网| 无码人妻丰满热妇又大又粗| 久久华人网| 久久99久久99久久99人受| 欧美综合网A| 色妺妺在线视频| 大香蕉乱级| 欧美在线伊人色| 午夜.DJ高清在线观看免费7| 老女人91| 九九热超碰| 成·人免费午夜在线观看| 午夜啊啊啊| 午夜福利免费福利视频| 四虎av在线| 97人人操人人干| 韩国免费播放一级毛片| 人妻爽爽啪视频| 久久草在线综合视频| 久久久久久九九九九| 欧美精品偷拍| 国产懂色精品国产av| 91精片| 国产美女精品| 五月天开心网| 国产高清26uuu| 激情婷婷丁香网| 日韩一区二区熟女| 欧亚性爱视频免费看| 99精品人妻| 天海翼久久| 自拍偷拍2025在线观看| 成·人免费午夜在线观看| 青青草玖玖爱| 欧美亚涩| 欧美日韩第一页| 天堂69亚洲精品中文字| 天天日骚逼熟女| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 久久久无码精品人妻二区 | 超碰偷拍| 美女淫穴| 夜夜中出国产| 日本精品不卡一二三区| 国产资源中文字幕在线| 深喉吞精| 亚洲91网站| 中文字幕丝袜人妻| 一二三区在线| 一级黄色牲爱A级片| 黄色免费网| 亚州一区二区| 久久是精品| 啊啊啊啊啊啊啊啊啊啊在线观看| 久久精品国产精品一区 | 中文字幕国产| 97超碰巨乳| 探花精品视频| 国产精品久久久久久久AV大片| 水滴偷拍| 熟女91网| 亚洲有码第一页| 视频在线观看一二三区| 91狼人| AA特级绝黄| 小视频国产| 久久超碰网| 国产精品9999| 精品一区二区2| 91欧美性| 日日干男人的天堂| 亚洲男人的天堂一区二区| 私色综合网| 婷婷综合五月| 91久久久久免| 色婷久久| 强奸乱亚洲| 亚洲精品国产精品乱码不99| 日韩av不卡在线看| 亚洲男人的天堂va亚洲男人社| 日韩91网| 欧美色91| 神马麻豆福利院| 亚洲少妇视频| 国产白丝网站| 青青草好吊色| 麻豆亚洲AV成人无码久久精品| 青草精品视频一日本久久久久网站| 亚洲色情在线影视| 亚洲凸凹超碰成人| 女人天堂网| 97精品一区二区视频在线观看| 欧美图片校园春色| 大鸡巴久久| 91美女片在线| 亚洲国产丝袜熟女av| 男人天堂电影院| 日韩欧美大片免费高清啪啪| 国产在线综合网| 久久精品国产亚洲妲己影视| 超碰成人公开| 久久‘黄片视频| 久久久97| 好吊色在线观看| 又大又长又爽| 二三四区精品| 四季av一区二区凹凸精品小说| 4虎在线观看| 超清中文乱码字幕| 精品无码一区二区三区| 中文字幕精品一区二区精| 亚洲啪啪视频一区二区| 五月丁香| 日韩紧密久久| 日韩精品怡红院| 欧美 色 亚洲| 欧美欧美啪啪视频| 欧美v亚洲v日韩v最新在线二区| 亚洲色诱惑| 天综合网| 天天影视之亚洲综合网| 国产路线专区| 日本三级一区二区 在线| 国产一区在线免费播放| 天天影视网综合少妇| 日本人妻天堂网站在线播放| 国产中文字幕在线观看| 色欲Av人妻精品一区二| 色乱二区| 97人妻色| 男女性扦B| 人妻黑丝袜电影| 久久线上视频免费看| 国产av激情无码久久天堂| 亚洲AV无码乱码在线观看性色| 国产伦精品免编号公布| 公司1区2区3区精产精| 东北毛片| 亚洲最大网站av| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 射丝袜大香蕉| 国产精品不卡一区二区三区av| 人人摸人人摸人人干| 精品v1区| 丝袜美腿91| 蜜乳成人AV| 69一区二区三区| julia高潮后不停追击中出| 久久青青草在线视频| 欧美天堂第二区| 欧美天天干| 果冻国产精品麻豆成人av| 欧美中文字幕男人天堂久久精品| 成人在线午夜视频一区| 无码人妻一区二区三区色欲aⅴ | 美女国产一区二区久久| 情色五月天久久久| 欧在线一二区| 99亚洲天堂| 国产精品久久久久999| 激情文学亚洲| 日韩一级特黄av毛片| 麻豆精品A片免费观看| 男人的天堂2019| 翔田千里av一区二区三区| 国产精品乱码久久久、久久| 久久国产逼| 97精品国产97久久久| 九t超碰| 97硬碰| 日韩精品人妻| 99热在线观看| 蜜臀久久99精品久久久久久婷婷| 中文久久爆乳| 欧美天堂第二区| 可以免费观看的日韩av毛片| 天天天天做夜夜夜夜做| 黄色av网站在线播放| 99.色网| 亚洲一区日韩精品| 91在线免费观看处女| 熟妇人妻一二三区免费| 五月天丁香| 麻豆 美女 丝袜 人妻 中文| 69超碰综合| 91岛国动作片| 啊啊啊啊啊操我视频| 日本淫乱女一区二区三区视频| 99热97| 黄片免费日韩| 六九九九| 视频国产成人精品日本亚洲18| 韩国女主播青草福利视频| 日韩无码视频黄色| 欧美婷婷久久| 欲香欲色| jazzjazz国产精品麻豆| 青青草色插素人| 欧美成人综合| 裸体1区| 91精品国产91久久久久久久久久久久| 色悠久久久av| 91人妻人人澡人人爽人人精品| 日比av无码| 国产天天骚| 日韩欧美大片免费高清啪啪| 色女99一级片在线观看| 日韩中文字幕视频| 久久9999 | 久久亚洲婷婷| 九九九热| 妇人噜噜| 国产精品午夜高潮呻吟久久av| 五月天精品| 人妻夜夜爽天天爽麻豆三区网站 | 日韩国产成人自拍视频| 淫穴高潮色图| 久久天天躁日日躁狠狠躁 | 伊人在线大香蕉视频久久| 亚洲国产欧美中文永久| 久久婷婷电影网| 久久精品国产精品| 欧美黑人猛交春色影视大全| 三级AV入口| 色亚洲欧美| 欧美日韩一干二干| 婷婷五月天AV| 亚洲蜜乳av| 亚洲精品黄码久久久久| 天天弄欧美| 国产无马av| 色操逼网| 淫纸中9区| 加勒比AV天堂| 丁香激情网| 国模少妇一区二区三区| 欧美日韩国产成人高清| 亚洲色图欧美色18直播在线| A啊啊在线观看| 国产精品久久久久无码A√| 日逼97| 超碰无码五月97| 不卡码视频| 九月色婷婷| 亚洲欧美国产成人综合不卡| 亚洲毛片基地专区| 97色伦欧美| 日韩中文字幕二区| 九月激情婷婷| 久久性爱视频免费看| 99re黄| 日韩大香蕉精品在线视频| 国产福利精品最新在线| 亚洲视频1区| 女生91网站| 91熟女丨91老女人| 无码操逼天堂| 97自拍一区| 熟女一区二区| 欧美在线伊人色| 99亚洲天堂| 国产辣妈在线视频福利| 夜夜欧美| 超碰久超碰久| 久噜噜| 看看小穴| 狠狠操夜夜操蜜桃视频三区| 精品久久久亚洲AV成人网站| 亚洲人妻中文高清| 欧美日韩国产另类综合| 自拍偷拍国产欧美日韩韩| 无码动漫av中文字幕| 欧美精品97| 亚洲一区二区av| 五月天人妻综合| 青久久| 国产自偷| 久久人妻一区二区三区高清| 国产噜噜噜噜噜久久久久久久久| 欧美 亚洲 制服 精品| 成人日韩欧美| 99国产精品在线观看| 国产伦精品一区二区三区在线观 | 又大又黄国产| 淫妻综合网| 人妻久热在线| 色哟哟-国产专区| 亚洲 中文 女同| 亚洲最大黄网| 男人的天堂亚洲| 天天日夜夜| 大香蕉伊人一区在线观看| 天美麻豆精品视频99| 蜜桃中文字日产乱幕4区| AV一二区| 裸体女人草逼视频播放一区,二区,三区,四区,五区| 国内91熟女人妻丝袜天天精品视频在线| 2001天天操| 欧美狠狠鲁| 欧日韩在线观看| 夜夜爽夜夜摸夜夜操免费视频| 精品国产a∨一区天美传媒| 天堂亚洲精品| 日本欧美不卡| 放黄片放3级黄片没穿衣服| 日韩无码操逼片| 久操网址| 男人的天堂2019AV| 另类亚洲图色| 天堂涩涩| 男人的天堂久久| 欧美人人曰人人操人人射射| 色色网91| www.五月天| 67914亚洲精品| 亚洲欧洲无码97久久精品| 欧美成人国产精品| 精品人妻一区二区三区四区| 伊人操| 风流老熟女一区二区三区l| 久草视频分类在线| 嗯嗯嗯啊啊啊操的我好爽| 国产视频第2页| 一本色道人妻久久| 欧美成人性爱视频在线播放| 伊人色综合网电影| 九九热九九热| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 性综合网| 国产成人欧美一区二区三区的国产| 在线观看日韩av不卡| 亚洲情色1区| 熟女91网| www.99色| 人妻加勒比东京热| 极品久久久久久久久久久久久久| 夜夜欢天天干| 国产成人亚洲精品无码古代早漏男| 中日高清无码操逼视频| 九九九午夜| 91青青| 久久透逼视频| 七久久久| 99热精品在线观看| 亚洲无码国产精品久久| 又大又长又爽| 91模特在线观看| 色翁荡息又大又硬又粗又爽| 成人情色一区二区| 亚洲清纯综合| 日韩 欧美 视频 在线 一区| 日韩中文欧美| 日韩 欧美 国产 麻豆| 色吧 综合| 在线日韩视频| 欧美成人国产精品| 好属操| 亚洲成人福利电影免费| 91+欧美| 日本久久女同性恋视频| 亚洲国产欧美中文永久| 五十路人妻在线| 另类小说综合网| 亚洲淫乱骚妇AV| 亚洲动态色图| 嗯啊不要啊在线 | 婷婷干黄色| 91久久精品国产| 人人操人人射人人干| 亚洲av无码成电影在线播放| 熟妇人妻一区二区三区| 91制服丝袜中文字幕| 色婷婷香蕉| 东京热精品97综合网| 岛国黄| 天天看特黄的免费网站| 久久狠狠色噜噜狠狠狠狠97| 高清不卡视频| 黑人娇小av在线播放| 不卡九肏| 日韩一级性爱无码| 亚洲天堂性爱| 免费试看60秒| 黄色二级片网站| 91天天综合日韩欧美| 99热在线播放| 中文字幕熟女人妻丝袜| 立川理惠无码一区二区| 国产精品97超碰| 免费a在线播放v| 九九九一二三| 亚洲天堂区| 夜夜草我| 欧美91网站| 久久久久久国产无码精品| 亚洲精品久久一区二区三区蜜桃臀| 久久无码成人| av婷婷色网| A片大香蕉在线| 91N综合在线| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | jizzjizz欧美| 久久久一区二区三区麻豆| 99综合免费视频| 97色在线视频| 久久香蕉国产传媒一区剧情天美| 亚洲中文字幕在现观看| 欧美精品第四五页中文字幕在线观看| 丰满美女一级毛片在线播放| 亚洲熟女偷拍在线观看| 久久9视频| 久久神马| 久久久久9999妇女| 婷婷久月| 色综合加勒比| 干B| 色色亚洲| 欧美性爱日韩高清| 97超碰总站| 高潮的A片激情扒开一区| 麻豆一区二区三区在线看 | 欧美 日韩第一性色| 99热在线观看| 欧美一区二区三区入口| 色婷婷日韩精品一区二区三区| 日韩一区二区精品视频| 成人AV超碰免费在线| 欧美综合1性辶| 精品一区二区三区四区外站 | 极品色综合| 天天弄欧美| 精品亚洲国产成人AV制服丝袜 | 欧美性爱第一页久久| 色偷偷综合91久久噜噜| 91在线欧色| www.久久最新地址| 特色a在线上| 蜜桃香蕉久草精品在线| 青草av在线| 99精品国产户外露出| 精品无码产区一区二| 熟女欧美日韩综合婷婷| 亚洲乱码尤物193YW| 九九九九免费高| 艳美熟妇先锋一二三区| 欧美性爱十八禁| 免费观看日本操逼视频| 色偷综合| 亚洲AV无码久久精品蜜桃小说| 五月天婷婷激情| 天堂无码精品国产久| 国产美女口爆吞精视频| 亚洲成人AB| 熟妇激情| 色五月av| 无码高清专| 熟女乱伦A| 十八禁啪啪视频| 91丨人妻丨国产丨丝袜| 欧色网址| 久久原创中文| 中文97国产| 91在线美女| 俺去久久| 亚洲色堂免费视频| 久久小视频| 日韩久久三区| 女人被男人桶爽视频网站| 成人自拍三级在线观看| 97碰久久| 99少妇| 一区二区视频在看| 97AV在线免费观看| 日韩一区二区熟女| 欧美亚男人的天堂| 亚洲 欧美 91| 涩五月婷婷| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 国产精品久久久久无码Av网曝门| 久久久久9| 成人黑料社久久| www.大香| A 在线网址| 女人 A一级| 手机在线中文字幕国产| 另类小说综合网| 麻花传媒免费网站在线观看| 男女猛烈无遮掩视频免费软件| 人人操,人人插| 蜜臀视频网站| 婷婷爽人人婷婷爽视频| 亚洲无码?第一页|