欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python進(jìn)行文件路徑處理的模塊詳解

 更新時(shí)間:2025年04月17日 09:05:33   作者:十二月的貓  
我相信很多人和小編一樣,從來沒有好好研究過Python的文件路徑,Python作為一個(gè)magical語言,肯定有其他更直觀的文件路徑處理方法,下面就跟隨小編一起了解一下吧

1. 前言

項(xiàng)目運(yùn)行環(huán)境:

  • 平臺(tái):Window11
  • 語言環(huán)境:Python3.8
  • 運(yùn)行環(huán)境1:PyCharm 2021.3
  • 運(yùn)行環(huán)境2:Jupyter Notebook 7.3.2
  • 框架:PyTorch 2.5.1(CUDA11.8)

2. 文件路徑檢查模塊

我相信很多人和貓貓一樣,從來沒有好好研究過Python的文件路徑。之前對于文件路徑輸出、跳轉(zhuǎn)、完整路徑的知識(shí)完全來自于Java和linux。例如./、../ 這樣子,你說可以用嘛,自然是可以的。但是這樣子實(shí)在是太不直觀了,Python作為一個(gè)magical語言,肯定有其他更直觀的文件路徑處理方法。你別說,還真有,今天貓貓就來帶你們看看。

2.1 模塊使用方法

假如你現(xiàn)在想要從一個(gè)文件中拿出一個(gè)東西 或者 把你生成的東西放到一個(gè)文件中,此時(shí)你就必須使用這樣一個(gè)文件路徑模塊了。作用是用來看你需要的東西,它到底在路徑層面怎么放到那一個(gè)文件夾中,或從文件夾中拿出來。

不要說你要看PyCharm旁邊的目錄結(jié)構(gòu)就可以了,貓貓今天被坑了1個(gè)多小時(shí)。因?yàn)榕苌疃葘W(xué)習(xí)的代碼我們都是放在服務(wù)器中跑的,但是寫代碼都是在本機(jī)PyCharm中寫的,因此兩者的目錄結(jié)構(gòu)大概率是不一樣的,一旦不注意就容易和貓貓一樣被坑好幾個(gè)小時(shí),所以每次處理和文件路徑有關(guān)的東西,都建議先用貓貓的模塊做一個(gè)檢查。

2.2 子模塊1:當(dāng)前路徑輸出

from pathlib import Path
 
# 獲取當(dāng)前腳本所在目錄,并輸出絕對路徑
script_parent = Path(__file__).resolve()
print(f"當(dāng)前腳本目錄完整路徑: {script_parent}")

Path(__file__):創(chuàng)建路徑對象。將當(dāng)前腳本的文件路徑轉(zhuǎn)換為 pathlib.Path 對象。

.resolve():解析為絕對路徑。相對路徑轉(zhuǎn)換為絕對路徑(如 ./script.py → /home/user/project/script.py)。

Path(__file__)          # /usr/bin/myscript(符號(hào)鏈接路徑)
Path(__file__).resolve() # /home/user/project/script.py(實(shí)際路徑)

2.3 子模塊2:路徑跳轉(zhuǎn)

通過前面的模塊,我們就看可以看到自己代碼所在的目錄?,F(xiàn)在我們想要實(shí)現(xiàn)路徑的跳轉(zhuǎn),因?yàn)槲覀兛绰窂降谋举|(zhì)就是為了到一個(gè)我們想要的路徑中拿到我們想要的東西,或者將我們的東西送到我們想要的地方去,這都涉及路徑的跳轉(zhuǎn)。路徑跳轉(zhuǎn)分為:父路徑跳轉(zhuǎn)+子路徑跳轉(zhuǎn)。

父路徑跳轉(zhuǎn):

本質(zhì)就是退出當(dāng)前路徑,回到父目錄。

from pathlib import Path
 
# 獲取當(dāng)前腳本所在目錄的父目錄,并輸出絕對路徑
script_parent = Path(__file__).resolve().parent
print(f"父目錄完整路徑: {script_parent}")

 .parent:獲取父目錄。返回路徑的父目錄。若路徑是 /home/user/project/script.py:

Path(__file__).resolve().parent # /home/user/project

子路徑跳轉(zhuǎn):

本質(zhì)就是在當(dāng)前目錄中往下深入,因此就是在目錄路徑后面追加一部分路徑內(nèi)容。

script_dir = Path(__file__).resolve().parent.parent.parent
target_dir = script_dir / "Real-ESRGAN-main" / "inputs"
target_dir1 = script_dir / "Real-ESRGAN-main"

/:后面跟上想要進(jìn)入的路徑名稱即可,可以一級(jí)一級(jí)疊加使用

.parent:同樣允許一級(jí)一級(jí)疊加使用 

2.4 子模塊3:根目錄完整路徑展示

def generate_file_tree(directory: str, max_depth: int = 3) -> str:
    """生成帶格式的目錄樹(優(yōu)化遞歸性能)"""
 
    def _tree(path: Path, prefix: str = "", depth=0) -> str:
        if depth > max_depth:
            return ""
 
        try:
            items = sorted(path.iterdir(), key=lambda x: (not x.is_dir(), x.name.lower()))
        except PermissionError:
            return f"{prefix}└── ?? 權(quán)限不足"
        except FileNotFoundError:
            return f"{prefix}└── ? 目錄已消失"
 
        contents = []
        for index, item in enumerate(items):
            is_last = index == len(items) - 1
            connector = "└── " if is_last else "├── "
 
            # 文件類型識(shí)別
            if item.is_symlink():
                icon = "??"
                suffix = f" -> {item.resolve()}"
            elif item.is_dir():
                icon = "??"
                suffix = ""
            else:
                icon = "??"
                suffix = f" ({item.stat().st_size // 1024} KB)" if item.stat().st_size > 0 else " (空文件)"
 
            entry = f"{prefix}{connector}{icon} {item.name}{suffix}"
            contents.append(entry)
 
            # 遞歸處理子目錄
            if item.is_dir() and not item.is_symlink():
                extension = "    " if is_last else "│   "
                contents.append(_tree(item, prefix + extension, depth + 1))
 
        return "\n".join(contents) if contents else f"{prefix}└── ?? 空目錄"
 
    root = Path(directory)
    if not root.exists():
        return f"? 路徑不存在: {directory}"
 
    return f"?? 目錄樹 {root} (深度限制: {max_depth})\n" + _tree(root)

通過上面代碼,我們能夠去找指定路徑下面的所有完整路徑目錄。通過前面三個(gè)模塊,我們可以回到我們代碼所在的根目錄,然后通過這個(gè)代碼,我們就可以找到根目錄下面所有的目錄結(jié)構(gòu)。

2.5 子模塊4:目標(biāo)路徑檢查

根據(jù)前面三個(gè)子模塊,我們已經(jīng)可以找到目標(biāo)路徑?,F(xiàn)在就是驗(yàn)證目標(biāo)路徑是否存在即可,因此需要對目標(biāo)路徑進(jìn)行檢查。

def path_exists(path_str: str) -> bool:
    """通用路徑存在性檢查"""
    return Path(path_str).exists()

3. 完整模塊展示

"""
path_analyzer.py - 多功能路徑分析工具
功能包含:
1. 腳本自身路徑信息展示
2. 智能目錄樹生成
3. 路徑存在性驗(yàn)證
4. 遞歸深度控制
"""
 
from pathlib import Path
import argparse
 
# 獲取腳本路徑信息
script_path = Path(__file__).resolve()
script_dir = script_path.parent
 
 
def show_script_info():
    """顯示腳本自身路徑信息"""
    print(f"?? 腳本路徑: {script_path}")
    print(f"?? 腳本目錄: {script_dir}\n")
 
 
def generate_file_tree(directory: str, max_depth: int = 3) -> str:
    """生成帶格式的目錄樹(優(yōu)化遞歸性能)"""
 
    def _tree(path: Path, prefix: str = "", depth=0) -> str:
        if depth > max_depth:
            return ""
 
        try:
            items = sorted(path.iterdir(), key=lambda x: (not x.is_dir(), x.name.lower()))
        except PermissionError:
            return f"{prefix}└── ?? 權(quán)限不足"
        except FileNotFoundError:
            return f"{prefix}└── ? 目錄已消失"
 
        contents = []
        for index, item in enumerate(items):
            is_last = index == len(items) - 1
            connector = "└── " if is_last else "├── "
 
            # 文件類型識(shí)別
            if item.is_symlink():
                icon = "??"
                suffix = f" -> {item.resolve()}"
            elif item.is_dir():
                icon = "??"
                suffix = ""
            else:
                icon = "??"
                suffix = f" ({item.stat().st_size // 1024} KB)" if item.stat().st_size > 0 else " (空文件)"
 
            entry = f"{prefix}{connector}{icon} {item.name}{suffix}"
            contents.append(entry)
 
            # 遞歸處理子目錄
            if item.is_dir() and not item.is_symlink():
                extension = "    " if is_last else "│   "
                contents.append(_tree(item, prefix + extension, depth + 1))
 
        return "\n".join(contents) if contents else f"{prefix}└── ?? 空目錄"
 
    root = Path(directory)
    if not root.exists():
        return f"? 路徑不存在: {directory}"
 
    return f"?? 目錄樹 {root} (深度限制: {max_depth})\n" + _tree(root)
 
 
def path_check(path_str: str) -> dict:
    """增強(qiáng)型路徑檢查"""
    path = Path(path_str)
    status = {
        'exists': path.exists(),
        'is_file': path.is_file(),
        'is_dir': path.is_dir(),
        'size': path.stat().st_size if path.exists() else 0
    }
    return status
 
 
def main():
    """命令行入口點(diǎn)"""
    parser = argparse.ArgumentParser(description="路徑分析工具")
    parser.add_argument('path', nargs='?', default=str(script_dir), help="要分析的路徑(默認(rèn)為腳本目錄)")
    parser.add_argument('-d', '--max-depth', type=int, default=3, help="目錄樹遞歸深度(默認(rèn)3)")
    parser.add_argument('-q', '--quiet', action='store_true', help="靜默模式(不顯示腳本信息)")
 
    args = parser.parse_args()
 
    if not args.quiet:
        show_script_info()
 
    # 路徑有效性檢查
    check_result = path_check(args.path)
    if not check_result['exists']:
        print(f"? 錯(cuò)誤:路徑不存在 - {args.path}")
        return
 
    # 生成目錄樹
    tree = generate_file_tree(args.path, args.max_depth)
    print(tree)
 
    # 顯示統(tǒng)計(jì)信息
    print(f"\n?? 路徑統(tǒng)計(jì):")
    print(f"  - 類型: {'目錄' if check_result['is_dir'] else '文件'}")
    if check_result['is_dir']:
        print(f"  - 包含項(xiàng)目: {len(list(Path(args.path).iterdir()))}")
    else:
        print(f"  - 文件大小: {check_result['size'] // 1024} KB")
 
 
if __name__ == "__main__":
    main()

注意哈,上面的模塊代碼可以直接使用,僅僅需要修改的只有def main中的內(nèi)容,主要還是對文件路徑完整模塊的一些功能進(jìn)行調(diào)整(都已經(jīng)注釋好了)

到此這篇關(guān)于Python進(jìn)行文件路徑檢查的模塊詳解的文章就介紹到這了,更多相關(guān)Python文件路徑檢查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)將n個(gè)點(diǎn)均勻地分布在球面上的方法

    Python實(shí)現(xiàn)將n個(gè)點(diǎn)均勻地分布在球面上的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)將n個(gè)點(diǎn)均勻地分布在球面上的方法,涉及Python繪圖的技巧與相關(guān)數(shù)學(xué)函數(shù)的調(diào)用,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Python畫圖學(xué)習(xí)入門教程

    Python畫圖學(xué)習(xí)入門教程

    這篇文章主要介紹了Python畫圖的方法,結(jié)合實(shí)例形式分析了Python基本的線性圖、餅狀圖等繪制技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • python實(shí)現(xiàn)多進(jìn)程并發(fā)控制Semaphore與互斥鎖LOCK

    python實(shí)現(xiàn)多進(jìn)程并發(fā)控制Semaphore與互斥鎖LOCK

    本文主要介紹了python實(shí)現(xiàn)多進(jìn)程并發(fā)控制Semaphore與互斥鎖LOCK,通過實(shí)例來介紹互斥鎖和進(jìn)程并發(fā)控制 semaphore的具體使用,感興趣的同學(xué)可以了解一下
    2021-05-05
  • 非常全面的Python常見基礎(chǔ)面試題及答案

    非常全面的Python常見基礎(chǔ)面試題及答案

    Python是目前編程領(lǐng)域最受歡迎的語言,Python可用于許多領(lǐng)域,Web應(yīng)用程序開發(fā),自動(dòng)化,數(shù)學(xué)建模,大數(shù)據(jù)應(yīng)用程序等等,這篇文章主要給大家介紹了關(guān)于Python常見基礎(chǔ)面試題及答案的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • python框架Django實(shí)戰(zhàn)商城項(xiàng)目之工程搭建過程圖文詳解

    python框架Django實(shí)戰(zhàn)商城項(xiàng)目之工程搭建過程圖文詳解

    這篇文章主要介紹了python框架Django實(shí)戰(zhàn)商城項(xiàng)目之工程搭建過程,這個(gè)項(xiàng)目很像京東商城,項(xiàng)目開發(fā)采用前后端不分離的模式,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-03-03
  • 淺談Python3中打開文件的方式(With open)

    淺談Python3中打開文件的方式(With open)

    本文主要介紹了淺談Python3中打開文件的方式(With open),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • python?動(dòng)態(tài)規(guī)劃問題解析(背包問題和最長公共子串)

    python?動(dòng)態(tài)規(guī)劃問題解析(背包問題和最長公共子串)

    這篇文章主要介紹了python?動(dòng)態(tài)規(guī)劃(背包問題和最長公共子串),在動(dòng)態(tài)規(guī)劃中,你要將某個(gè)指標(biāo)最大化。在這個(gè)例子中,你要找出兩個(gè)單詞的最長公共子串。fish和fosh都包含的最長子串是什么呢,感興趣的朋友跟隨小編一起看看吧
    2022-05-05
  • python flask服務(wù)端響應(yīng)與重定向處理各種用法小結(jié)

    python flask服務(wù)端響應(yīng)與重定向處理各種用法小結(jié)

    這篇文章主要介紹了python flask服務(wù)端響應(yīng)與重定向處理各種用法小結(jié),本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03
  • python 使用Yolact訓(xùn)練自己的數(shù)據(jù)集

    python 使用Yolact訓(xùn)練自己的數(shù)據(jù)集

    這篇文章主要介紹了python 使用Yolact訓(xùn)練自己的數(shù)據(jù)集,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • Pandas中Apply函數(shù)加速百倍的技巧分享

    Pandas中Apply函數(shù)加速百倍的技巧分享

    雖然目前dask,cudf等包的出現(xiàn),使得我們的數(shù)據(jù)處理大大得到了加速,但是并不是每個(gè)人都有比較好的gpu。本文為大家分享幾個(gè)Pandas中Apply函數(shù)加速百倍的技巧,希望有所幫助
    2022-07-07

最新評論