目前大家常用的對于文件和操作的操作使用??os.path?
?較多,比如 獲取當前路徑??os.getcwd()?
?,判斷文件路徑是否存在??os.path.exists(folder)?
?等等。
(資料圖)
在Python3.4開始,官方提供了??pathlib 面向對象的文件系統(tǒng)路徑?
?,核心的點在于??面向對象?
?, 這也是??os.path?
?和??pathlib?
?的本質區(qū)別
為什么推進使用 pathlib 呢?
來看個對比演示
>>> import os>>> import pathlib>>> p1 = os.getcwd()>>> p2 = pathlib.Path.cwd()>>> print(p1, type(p1))/data/colinspace/temp>>> print(p2, type(p2))/data/colinspace/temp
看到區(qū)別在于 os 返回的是??字符串?
?, 而 pathlib.Path 返回的是??類?
?, 這個類提供了很多有用的關于文件和文件夾的內置方法
>>> p2.p2.absolute( p2.home( p2.joinpath( p2.read_bytes( p2.stemp2.anchor p2.is_absolute( p2.lchmod( p2.read_text( p2.suffixp2.as_posix( p2.is_block_device( p2.lstat( p2.relative_to( p2.suffixesp2.as_uri( p2.is_char_device( p2.match( p2.rename( p2.symlink_to(p2.chmod( p2.is_dir( p2.mkdir( p2.replace( p2.touch(p2.cwd( p2.is_fifo( p2.name p2.resolve( p2.unlink(p2.drive p2.is_file( p2.open( p2.rglob( p2.with_name(p2.exists( p2.is_reserved( p2.owner( p2.rmdir( p2.with_suffix(p2.expanduser( p2.is_socket( p2.parent p2.root p2.write_bytes(p2.glob( p2.is_symlink( p2.parents p2.samefile( p2.write_text(p2.group( p2.iterdir( p2.parts p2.stat(# 檢查文件夾是否存在>>> p2.exists()True# 判斷是否是文件is_file/文件夾is_dir>>> p2.is_dir()True# 返回父級目錄>>> p2.parentPosixPath("/data/colinspace")
1、遍歷文件夾更快,因為它返回的是 generator 生成器,節(jié)省內存
# 返回生成器>>> p2.iterdir()>>> list(p2.iterdir())[PosixPath("/data/colinspace/temp/file.txt"), PosixPath("/data/colinspace/temp/redis-rdr"), PosixPath("/data/colinspace/temp/django_task"), PosixPath("/data/colinspace/temp/20210923"), PosixPath("/data/colinspace/temp/java-service-check.py")]
2、支持通配符,類似 find正則匹配查找特定類型的文件
>>> p2.glob("*.py")>>> list(p2.glob("*.py"))[PosixPath("/data/colinspace/temp/java-service-check.py"), PosixPath("/data/colinspace/temp/demo_paramiko.py"), PosixPath("/data/colinspace/temp/demo_consul.py"), ... ...]
3、高效的讀寫文件操作
>>> p3 = pathlib.Path("1207_test.txt")# 文件不存在的時候,寫入是會默認創(chuàng)建>>> p3.write_text("Hello World\nHello Pathlib!")26>>> p3.read_text()"Hello World\nHello Pathlib!"# 也可以使用 with 進行讀取>>> with p3.open() as f:... f.readlines()...["Hello World\n", "Hello Pathlib!"]Path.open(mode="r", buffering=-1, encoding=None, errors=None, newline=None) 打開文件,類似內置的open函數(shù)Path.read_bytes() 按照二進制模式讀取Path.write_bytes(data)
將文件以二進制模式打開,寫入 data 并關閉;一個同名的現(xiàn)存文件將被覆蓋。
Path.write_text(data, encoding=None, errors=None, newline=None)將文件以文本模式打開,寫入 data 并關閉;同名的現(xiàn)有文件會被覆蓋。 可選形參的含義與 open() 的相同。
Path.read_text() 按照文件字符串模式讀取其他的方法可以參考官方文檔 https://docs.python.org/zh-cn/3/library/pathlib.html
pathlib同步的考慮了 Windows 路徑的特性,提供了帶 I/O 操作的和不帶 I/O 操作的類,官方定義叫做 具體路徑(帶I/O)和純路徑(不帶I/O)
只想操作路徑但不想實際訪問操作系統(tǒng),實例化一個純路徑是必須的。比如在Linux設備上操作Windows路徑,那么應該實例化一個 PureWindowsPath 而不是 WindowsPath
os/os.path | pathlib |
os.path.abspath() | Path.absolute() |
os.path.realpath() | Path.resolve() |
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() |
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() |
os.link() | Path.hardlink_to() |
os.symlink() | Path.symlink_to() |
os.readlink() | Path.readlink() |
os.path.relpath() | PurePath.relative_to() |
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.stem and PurePath.suffix |
原文鏈接 ??Python模塊pathlib操作文件和目錄操作總結??