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

Python使用pathlib庫實現(xiàn)優(yōu)雅的處理路徑

 更新時間:2023年12月07日 14:46:20   作者:暴走的海鴿  
如果你需要在 Python 里進(jìn)行文件處理,那么標(biāo)準(zhǔn)庫中的os和os.path兄弟倆一定是你無法避開的兩個模塊,本文主要來和大家聊聊如何使用pathlib庫實現(xiàn)優(yōu)雅的處理路徑,感興趣的可以了解下

前言

如果你需要在 Python 里進(jìn)行文件處理,那么標(biāo)準(zhǔn)庫中的osos.path兄弟倆一定是你無法避開的兩個模塊。它們提供了非常多與文件路徑處理、文件讀寫、文件狀態(tài)查看相關(guān)的工具函數(shù)。

os.path一直是Python中處理路徑事實上的標(biāo)準(zhǔn),但它可能會顯得有些繁瑣。與之相比,pathlib模塊提供了更簡單、更直觀的方式來完成絕大多數(shù)任務(wù)。

在Python3.4開始,官方提供了pathlib面向?qū)ο蟮奈募到y(tǒng)路徑,核心的點在于面向?qū)ο螅?這也是os.pathpathlib的本質(zhì)區(qū)別。

2019年Django也將os.path替換成了pathlib。

為什么需要pathlib

pathlib出現(xiàn)之前,Python的標(biāo)準(zhǔn)庫osos.path支持操作文件路徑,使用字符串表示文件路徑。

>>> import os.path
 
>>> os.path.abspath('test')
'F:\\spug-3.0\\spug-3.0\\spug_api\\test'

或者寫出下面這種長長的代碼:

>>> import os.path
>>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
False

但是路徑并不只是一個字符串,如果需要對文件進(jìn)行操作,需要結(jié)合使用多個標(biāo)準(zhǔn)庫的功能,如: 需要移動當(dāng)前目錄下的一些文件到備份目錄,需要使用osglobshutil庫。

import glob
import os
import shutil

for file_name in glob.glob('*.txt'):
    new_path = os.path.join('archive', file_name)
    shutil.move(file_name, new_path)

而且,由于不同的操作系統(tǒng)使用的分隔符不同,使用字符串拼接路徑就容易出現(xiàn)問題。

有了pathlib,使得上述的問題變得更加輕松,pathlib創(chuàng)建的Path對象,可以直接通過正斜杠運算符/連接字符串生成新的對象。

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
import pathlib
from pathlib import WindowsPath

path = pathlib.Path()

if __name__ == '__main__':
    print(path)  # .
    print(path.absolute() / 'test' / 'data.txt')  # F:\spug-3.0\spug-3.0\spug_api\test\data.txt

pathlib的基本使用

Path類的常用屬性和方法

descriptor:
    parts: 每一層路徑
    parent: 父目錄
    parents: 所有父目錄
    stem: 不帶后綴的文件名
    name: 文件名或目錄名
    suffix: 文件名后綴
    suffixes: 文件名后綴列表

function:
    is_absolute: 是否為絕對路徑
    joinpath: 組合路徑
    cwd: 當(dāng)前工作目錄
    home: 根目錄
    rename: 重命名
    replace: 覆蓋
    touch: 新建文件
    exists: 是否存在路徑
    expanduser: 返回帶~和~user的路徑
    glob: 列出匹配的文件或目錄
    rglob: 遞歸列出匹配的文件或目錄
    is_dir: 是否為目錄
    is_file: 是否為文件
    iterdir: 列出路徑下的文件和目錄
    mkdir: 新建目錄
    open: 打開文件
    resolve: 轉(zhuǎn)成絕對路徑
    rmdir: 刪除目錄
    ...

創(chuàng)建路徑

前面用到了pathlib.Path()獲取當(dāng)前路徑的方法,也可以顯示的傳入路徑字符串進(jìn)行路徑創(chuàng)建,支持相對路徑和絕對路徑字符串的傳遞。

os.path

from os.path import abspath, dirname, join

manage_path = abspath("./manage.py")  # 絕對路徑
base_dir = dirname(manage_path)  # 父目錄
another_manage_path = join(base_dir, "another_manage.py")  # 構(gòu)成新路徑

print("manage_path:", manage_path)  
print("base_dir:", base_dir)  
print("another_manage_path:", another_manage_path)

# manage_path: F:\spug-3.0\spug-3.0\spug_api\manage.py
# base_dir: F:\spug-3.0\spug-3.0\spug_api
# another_manage_path: F:\spug-3.0\spug-3.0\spug_api\another_manage.py

pathlib

from pathlib import Path

manage_path = Path("manage.py").resolve()  # 絕對路徑
base_dir = manage_path.parent  # 父目錄
another_manage_path = base_dir / "another_manage.py"  # 構(gòu)成新路徑

print("manage_path:", manage_path)
print("base_dir:", base_dir)
print("another_manage_path:", another_manage_path)

顯然用pathlib更加便捷和優(yōu)雅!!

創(chuàng)建文件 Path.touch()

from pathlib import Path

path = Path()
new_path = path / "hello.py"
new_path.touch()

創(chuàng)建目錄和重命名

os.path

import os
import os.path

os.makedirs(os.path.join("./src", "stuff"), exist_ok=True)  # 構(gòu)建目錄./src/stuff
os.rename("./src/stuff", "./src/config")  # 將./src/stuff重命名為./src/config

pathlib

from pathlib import Path

Path("./src/stuff").mkdir(parents=True, exist_ok=True)  # 構(gòu)建目錄./src/stuff
Path("./src/stuff").rename("./src/config")  # 將./src/stuff重命名為./src/config

mkdir方法:

  • parents默認(rèn)為False,父目錄不存在時拋出FileNotFoundError
  • exist_ok默認(rèn)為False,該目錄存在時拋出FileExistsError

遞歸列出某類型文件

假設(shè)目錄:

(spug-3.0) PS F:\spug-3.0\spug-3.0\spug_api\path_lib_test> tree /F            

F:.
│  pathlib_test.py
│  __init__.py
│
└─test
        __init__.py

列出所有.py文件

os

# ! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41

from os import walk
from os.path import join, expanduser, abspath

home = expanduser('~')
python_files = []

for root, dirs, files in walk("./test"):
    python_files.extend([abspath(join(root, file)) for file in files if file.endswith('.mp4')])

# 現(xiàn)在python_files列表包含所有以'.mp4'結(jié)尾的文件的絕對路徑

print(python_files)  # ['F:\\spug-3.0\\spug-3.0\\spug_api\\path_lib_test\\test\\1.mp4']

glob

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from glob import glob
top_level_py_files = glob("./*.py")
all_py_files = glob("./**/*.py", recursive=True)  # 遞歸
print(top_level_py_files)
print(all_py_files)
# ['.\\pathlib_test.py', '.\\__init__.py']
# ['.\\pathlib_test.py', '.\\__init__.py', '.\\test\\__init__.py']

pathlib

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
top_level_py_files = Path(".").glob("*.py") # 不進(jìn)行遞歸
all_py_files = Path(".").rglob("*.py")  # 遞歸
print(list(top_level_py_files))
print(list(all_py_files))
# [WindowsPath('pathlib_test.py'), WindowsPath('__init__.py')]
# [WindowsPath('pathlib_test.py'), WindowsPath('__init__.py'), WindowsPath('test/__init__.py')]

glob不會確定地返回路徑順序。

打開多個文件并讀取內(nèi)容

glob

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from glob import glob
contents = []
for fname in glob("./**/*init*.py", recursive=True):
    with open(fname, "r") as f:
        contents.append(f.read())
print(contents)
# ["#! -*-conding=: UTF-8 -*-\n# 2023/12/6 17:20\n\n\nif __name__ == '__main__':\n    pass\n", "#! -*-conding=: UTF-8 -*-\n# 2023/12/6 17:22\n\n\nif __name__ == '__main__':\n    pass\n"]

pathlib

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
contents = []
for path in Path(".").rglob("*__init__.py"):
    with path.open("r", encoding="UTF-8") as file:
        contents.append(file.read())
print(contents)
# ["#! -*-conding=: UTF-8 -*-\n# 2023/12/6 17:20\n\n\nif __name__ == '__main__':\n    pass\n", "#! -*-conding=: UTF-8 -*-\n# 2023/12/6 17:22\n\n\nif __name__ == '__main__':\n    pass\n"]

操作符

使用/取代os.path.join進(jìn)行路徑拼接。

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41

from pathlib import Path

base_dir = Path(".")
child_dir = base_dir / "test"
file_path = child_dir / "__init__.py"

print(file_path)
# test\__init__.py

路徑的每個位置 Path.parts

from pathlib import Path

file_path = Path("F:/spug-3.0/spug-3.0/spug_api/pathlib_test.py")
print(file_path.parts)
# ('F:\\', 'spug-3.0', 'spug-3.0', 'spug_api', 'pathlib_test.py')

父目錄 Path.parents & Path.parent

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41

from pathlib import Path

file_path = Path("path_lib_test/test/__init__.py")

print(file_path.parents)   # <WindowsPath.parents>

for parent in file_path.parents:
    print(parent)

# path_lib_test\test
# path_lib_test
# .

print(file_path.parent)

# path_lib_test\test

文件名或目錄名 Path.name

os.path

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
import os
print(os.path.basename("test/__init__.py"))  # __init__.py
print(os.path.basename("test"))  # test

pathlib

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
print(Path("test/__init__.py").name)  # __init__.py
print(Path("test").name)  # test

文件名后綴 Path.suffixes & Path.suffix

os.path

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
import os
print(os.path.splitext("test/__init__.py")[-1])
# ('test/__init__', '.py')

pathlib

from pathlib import Path
file_path = Path("test/__init__.py")
print(file_path.suffixes)  # ['.py']
print(file_path.suffix)  # .py

不帶后綴文件名 Path.stem

os.path

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
import os
print(os.path.splitext(os.path.basename("test/__init__.py"))[0])  # __init__

pathlib

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
print(Path("test/__init__.py").stem)  # __init__

是否為絕對路徑 Path.is_absolute()

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
file_path = Path("test/__init__.py")
print(file_path.is_absolute())  # False

組合路徑 Path.joinpath(*other)

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
file_path = Path(".").joinpath("test", "__init__.py")
print(file_path)  # test\__init__.py

獲取當(dāng)前工作目錄 Path.cwd()

和 os.getcwd() 返回的相同

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
file_path = Path()
print(file_path.cwd())  # F:\spug-3.0\spug-3.0\spug_api\path_lib_test

根目錄 Path.home()

返回一個表示用戶家目錄的新路徑對象。

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
print(Path.home())  # C:\Users\lianhf

是否存在路徑 Path.exists()

os.path

import os.path
print(os.path.exists("test/aaaa.py"))
# False

pathlib

from pathlib import Path
file_path = Path("test/aaaa.py")
print(file_path.exists())
# False

返回帶和user的路徑 Path.expanduser()

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
file_path = Path("~/test/aaaa.py")
print(file_path.expanduser())  # C:\Users\lianhf\test\aaaa.py

是否為目錄或文件 Path.is_dir() & Path.is_file()

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
dir_path = Path("test/")
print(dir_path.is_dir())  # True
print(dir_path.is_file())  # False
file_path = Path("test/__init__.py")
print(file_path.is_dir())  # False
print(file_path.is_file())  # True

列出路徑下的文件和目錄 Path.iterdir()

產(chǎn)生該路徑下的對象的路徑

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
base_path = Path(".")
contents = [content for content in base_path.iterdir()]
print(contents)  # [WindowsPath('pathlib_test.py'), WindowsPath('test'), WindowsPath('__init__.py')]

打開文件 Path.open()

事實上,Path.open() 是在幕后調(diào)用內(nèi)置的 open() 函數(shù)。這就是為什么你可以在 Path.open() 中使用模式和編碼等參數(shù)。

#!usr/bin/env python
# -*- coding:utf-8 _*-
# __time__:2023/12/6 21:37
from pathlib import Path
path = Path.cwd() / "簡答題.md"
with path.open(mode="r", encoding="utf-8") as md_file:
    content = md_file.read()
    groceries = [line for line in content.splitlines() if line.startswith("##")]
print("\n".join(groceries))

覆蓋/移動 Path.replace()

將文件或目錄重命名為給定的 target,并返回一個新的指向 target 的 Path 實例。

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
path = Path("test/__init__.py")
path.replace(path.parent / "__init2__.py") 

轉(zhuǎn)成絕對路徑 Path.resolve()

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
path = Path("test/__init__.py")
print(path.resolve())  # F:\spug-3.0\spug-3.0\spug_api\path_lib_test\test\__init__.py

strict設(shè)為True,如果路徑不存在,則拋出FileNotFoundError

刪除目錄 Path.rmdir()

移除此目錄。此目錄必須為空的。

os.path

import os
os.rmdir("test/hello")

如果目錄下不為空,拋出OSError

pathlib

from pathlib import Path
file_path = Path("test/hello")
file_path.rmdir()

如果目錄下不為空,拋出OSError

刪除文件 os.remove()/Path.unlink()

os

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
import os
os.remove("test/hello.txt")

pathlib

#!usr/bin/env python
# -*- coding:utf-8 _*-
# __time__:2023/12/6 21:37
from pathlib import Path
p = Path('./username.txt')
p.unlink()

讀寫文件

  • .read_text(): 以文本模式打開路徑,并以字符串形式返回內(nèi)容。
  • .read_bytes(): 以二進(jìn)制模式打開路徑,并以字節(jié)字符串形式返回內(nèi)容。
  • .write_text(): 打開路徑并寫入字符串?dāng)?shù)據(jù)。
  • .write_bytes(): 以二進(jìn)制模式打開路徑并向其中寫入數(shù)據(jù)。
#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
# 除此之外,還有幾個很甜的方法,省去了 with open 語句
path = Path("/home/ubuntu/readme.txt")
text = path.read_text(encoding="utf-8")
path.write_text(text)
path = Path("/home/ubuntu/image.png")
image = path.read_bytes()
path.write_bytes(image)

上述每個方法都會處理文件的打開和關(guān)閉。

移動文件 shutil.move()/path.rename()/path.replace()

shutil

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
import shutil
shutil.move('./__init__.py', './test')

pathlib

可以使用path.rename()或者path.replace()移動文件:

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41
from pathlib import Path
path = Path('test/__init2__.py')
folder = Path('.')
path.rename(folder / path.name)
from pathlib import Path

source = Path("hello.py")
destination = Path("goodbye.py")

if not destination.exists():
    source.replace(destination)

上面的代碼并非并發(fā)安全的!這里僅提供實現(xiàn)思路。

也可以換一種思路:

from pathlib import Path
import fcntl

source = Path("hello.py")
destination = Path("goodbye.py")

lock_file = Path("lock_file.lock")

try:
    with lock_file.open(mode="xb") as lock:
        fcntl.flock(lock, fcntl.LOCK_EX)  # 獲取獨占鎖

        try:
            with destination.open(mode="xb") as file:
                file.write(source.read_bytes())
        except FileExistsError:
            print(f"File {destination} exists already.")
        else:
            source.unlink()
        finally:
            fcntl.flock(lock, fcntl.LOCK_UN)  # 釋放鎖

except FileExistsError:
    print(f"Another process is already handling the operation.")

重命名文件

文件重命名除了可以使用上述的path.rename(),還可以使用.with_stem(), .with_suffix(), 或者.with_name()結(jié)合.replace()來實現(xiàn)。

#!usr/bin/env python
# -*- coding:utf-8 _*-
# __time__:2023/12/6 21:37

from pathlib import Path

txt_path = Path("./hello.txt")

md_path = txt_path.with_suffix(".md")

txt_path.replace(md_path)

使用.with_suffix()會返回一個新路徑。要真正重命名文件,需要使用.replace()。這將把txt_path移到md_path,并在保存時重命名它。

如果要更改包括擴(kuò)展名在內(nèi)的完整文件名,可以使用.with_name()

from pathlib import Path

md_path = Path("./hello.md")

txt_path = md_path.with_name("goodbye.md")

md_path.replace(txt_path)

文件復(fù)制

令人驚訝的是,Path并沒有復(fù)制文件的方法。不過,利用目前學(xué)到的pathlib知識,只需幾行代碼就能創(chuàng)建相同的功能:

from pathlib import Path

source = Path("shopping_list.md")
destination = source.with_stem("shopping_list_02")
destination.write_bytes(source.read_bytes())

使用.with_stem()創(chuàng)建新的文件名,但沒有更改擴(kuò)展名,并使用.read_bytes()讀取源文件的內(nèi)容,然后使用.write_bytes()將這些內(nèi)容寫入目標(biāo)文件。

雖然使用 pathlib 來處理所有與路徑相關(guān)的事情很有吸引力,但你也可以考慮使用shutil來復(fù)制文件。它是一個很好的選擇,也知道如何處理路徑對象。

檢查路徑是否符合規(guī)則

p = Path('data.json')
# math 檢查匹配規(guī)則
print(p.match('*.json'))  # True

轉(zhuǎn)Unix風(fēng)格

as_posix():返回使用正斜杠(/)的路徑字符串

from pathlib import Path

path = Path('/host/share')
print(str(path))  # \host\share
print(path.as_posix())  # /host/share

pathlib 是否比 os.path 更快

在我嘗試運行基準(zhǔn)測試之前,我猜它不是。Path()是一種面向?qū)ο蟮穆窂讲僮鞣椒?。實例化一個對象可能比調(diào)用os.path.join(只需吐出一個字符串)更費時。

但即使慢,我也很好奇到底慢了多少。另外,誰知道呢,也許我的直覺是錯的?

廢話不多說,直接來看下路徑拼接的快慢對比:

#!usr/bin/env python
# -*- coding:utf-8 _*-
# __time__:2023/12/6 21:37

# pathlib_benchmarks.py

import os
from pathlib import Path


def os_path_join():
    return os.path.join("/", "how", "do", "you", "do", "hello", "world.txt")


def pathlib_join():
    return Path("/") / "how" / "do" / "you" / "do" / "hello" / "world.txt"

我們定義一個pathlib_benchmarks.py的腳本,os_path_joinpathlib_join方法分別使用os.pathpath模塊實現(xiàn),然后執(zhí)行測試:

PS E:\projects\mkwang\python_and_go> python -m timeit -s "from pathlib_benchmarks import pathlib_join" "pathlib_join()"
10000 loops, best of 5: 21.9 usec per loop
PS E:\projects\mkwang\python_and_go> python -m timeit -s "from pathlib_benchmarks import os_path_join" "os_path_join()"
50000 loops, best of 5: 6.95 usec per loop

結(jié)果和預(yù)期的差不太多!更多的對比,如果你有興趣的話可以自己試試~

常用腳本

統(tǒng)計文件個數(shù)

我們可以使用.iterdir方法獲取當(dāng)前文件下的所有文件。

import pathlib
from collections import Counter

now_path = pathlib.Path.cwd()
gen = (i.suffix for i in now_path.iterdir())
print(Counter(gen))  # Counter({'.py': 16, '': 11, '.txt': 1, '.png': 1, '.csv': 1})

查看目錄中最近修改的文件

from pathlib import Path
from datetime import datetime

directory = Path.cwd()
time, file_path = max((f.stat().st_mtime, f) for f in directory.iterdir())
print(datetime.fromtimestamp(time), file_path)  # 023-12-06 22:56:09.532177 E:\projects\mkwang\python_and_go\pathlib_test.py

移動子文件夾下的所有文件到本文件夾

from pathlib import Path

current_file = Path(__file__).absolute()

for path in Path('.').rglob('*'):
    if path == current_file or path.parent == Path('.'):
        continue
    if path.is_file():
        try:
            new_path = Path('.') / path.name
            path.rename(new_path)
        except Exception as e:
            print(f"Error moving {path}: {e}")

展示目錄樹

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41

import pathlib


def print_tree(directory, depth=0):
    spacer = '    ' * depth
    print(f'{spacer}+ {directory.name}/')

    for path in sorted(directory.rglob('*')):
        if path.is_file():
            print(f'{spacer}    {path.name}')
        else:
            print_tree(path, depth + 1)


if __name__ == '__main__':
    current_path = pathlib.Path.cwd()
    print_tree(current_path)

批量重命名

#! -*-conding=: UTF-8 -*-
# 2023/12/6 11:41

from pathlib import Path


def batch_rename(directory_path):
    directory = Path(directory_path)

    for file_path in directory.glob('*'):
        if file_path.is_file():
            new_name = file_path.stem.split(' RAW')[0] + '.mp4'
            new_path = file_path.with_name(new_name)
            file_path.rename(new_path)


if __name__ == '__main__':
    target_directory = './test'  # 需要批量重命名的路徑
    batch_rename(target_directory)

獲取文件大小

import os
from pathlib import Path

print(os.path.getsize('test/1.mp4'))
print(Path('test/1.mp4').stat().st_size)

文件存在且不為空

from pathlib import Path


def path_exists(path):
    """文件存在且不為空"""
    if path and Path(path).exists() and Path(path).stat().st_size > 0:
        return True
    return False


print(path_exists(''))  # False
print(path_exists('abc.txt'))  # False
print(path_exists(__file__))  # True

小結(jié)

從 Python 3.4 開始,pathlib已在標(biāo)準(zhǔn)庫中提供。創(chuàng)建、刪除、讀取、寫入、查找、移動、復(fù)制、拆分,以及其他任何你想對文件路徑或文件本身執(zhí)行的操作,pathlib 可能都有相應(yīng)的功能。使用pathlib,文件路徑可以由適當(dāng)?shù)?code>Path對象表示,而不是像以前一樣用純字符串表示。 這些對象使代碼處理文件路徑:

  • 更容易閱讀,特別是可以使用 “/” 將路徑連接在一起
  • 更強(qiáng)大,直接在對象上提供最必要的方法和屬性
  • 在操作系統(tǒng)中更加一致,因為Path對象隱藏了不同系統(tǒng)的特性

當(dāng)然,os.path或其他模塊可以更快地完成這些操作。

功能os 和 os.pathpathlib
絕對路徑os.path.abspath()Path.resolve()
改變文件的模式和權(quán)限os.chmod()Path.chmod()
新建目錄os.mkdir()Path.mkdir()
新建目錄os.makedirs()Path.mkdir()
重命名os.rename()Path.rename()
覆蓋os.replace()Path.replace()
刪除目錄os.rmdir()Path.rmdir()
移除此文件或符號鏈接os.remove(), os.unlink()Path.unlink()
當(dāng)前工作目錄os.getcwd()Path.cwd()
是否存在路徑os.path.exists()Path.exists()
根目錄os.path.expanduser()Path.expanduser(), Path.home()
列出路徑下的文件和目錄os.listdir()Path.iterdir()
是否為目錄os.path.isdir()Path.is_dir()
是否為文件os.path.isfile()Path.is_file()
是否指向符號鏈接os.path.islink()Path.is_symlink()
創(chuàng)建硬鏈接os.link()Path.link_to()
將此路徑創(chuàng)建為符號鏈接os.symlink()Path.symlink_to()
返回符號鏈接所指向的路徑os.readlink()Path.readlink()
返回 os.stat_result 對象包含此路徑信息os.stat()Path.stat(), Path.owner(), Path.group()
是否為絕對路徑os.path.isabs()PurePath.is_absolute()
連接路徑os.path.join()PurePath.joinpath()
文件名或目錄名os.path.basename()PurePath.name
父目錄os.path.dirname()PurePath.parent
是否相同文件os.path.samefile()Path.samefile()
文件名后綴os.path.splitext()PurePath.suffix
移動文件shutil.move()Path.rename()

以上就是Python使用pathlib庫實現(xiàn)優(yōu)雅的處理路徑的詳細(xì)內(nèi)容,更多關(guān)于Python pathlib處理路徑的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python爬蟲之Selenium警告框(彈窗)處理

    Python爬蟲之Selenium警告框(彈窗)處理

    這篇文章主要介紹了Python爬蟲之Selenium警告框(彈窗)處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • OpenCV-Python實現(xiàn)人臉磨皮算法

    OpenCV-Python實現(xiàn)人臉磨皮算法

    人臉磨皮是最基礎(chǔ)的人臉美顏效果。本文介紹了OpenCV-Python實現(xiàn)人臉磨皮算法,主要包括圖像濾波,圖像融合和圖像銳化,感興趣的可以了解一下
    2021-06-06
  • python 系統(tǒng)調(diào)用的實例詳解

    python 系統(tǒng)調(diào)用的實例詳解

    這篇文章主要介紹了python 系統(tǒng)調(diào)用的實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Python面向?qū)ο筇厥獬蓡T

    Python面向?qū)ο筇厥獬蓡T

    這篇文章主要介紹了Python面向?qū)ο筇厥獬蓡T的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • python基礎(chǔ)入門之字典和集合

    python基礎(chǔ)入門之字典和集合

    Python中的字典和集合是非常相似的數(shù)據(jù)類型,字典是無序的鍵值對。集合中的數(shù)據(jù)是不重復(fù)的,并且不能通過索引去修改集合中的值,我們可以往集合中新增或者修改數(shù)據(jù)。集合是無序的,并且支持?jǐn)?shù)學(xué)中的集合運算,例如并集和交集等。
    2021-06-06
  • python docx的超鏈接網(wǎng)址和鏈接文本操作

    python docx的超鏈接網(wǎng)址和鏈接文本操作

    這篇文章主要介紹了python docx的超鏈接網(wǎng)址和鏈接文本操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python Selenium 設(shè)置元素等待的三種方式

    Python Selenium 設(shè)置元素等待的三種方式

    這篇文章主要介紹了Python Selenium 設(shè)置元素等待的三種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Django框架搭建的簡易圖書信息網(wǎng)站案例

    Django框架搭建的簡易圖書信息網(wǎng)站案例

    這篇文章主要介紹了Django框架搭建的簡易圖書信息網(wǎng)站案例,結(jié)合具體實例形式分析了基于Django框架實現(xiàn)圖書信息管理網(wǎng)站的具體步驟、相關(guān)實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下
    2019-05-05
  • pandas選擇或添加列生成新的DataFrame操作示例

    pandas選擇或添加列生成新的DataFrame操作示例

    這篇文章主要為大家介紹了pandas選擇或添加列生成新的DataFrame實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python中關(guān)于字典的常規(guī)操作范例以及介紹

    Python中關(guān)于字典的常規(guī)操作范例以及介紹

    今天小編幫大家簡單介紹下Python的一種數(shù)據(jù)結(jié)構(gòu): 字典,字典是 Python 提供的一種常用的數(shù)據(jù)結(jié)構(gòu),它用于存放具有映射關(guān)系的數(shù)據(jù),通讀本篇對大家的學(xué)習(xí)或工作具有一定的價值,需要的朋友可以參考下
    2021-09-09

最新評論