Python 檔案路徑物件 Path
阿新 • • 發佈:2021-08-01
Python 檔案路徑 Path
使用from pathlib import Path 替代 os.path ,
已面向物件的方式進行檔案路近操作
列印當前的路徑
from pathlib import Path
print(Path.cwd())
判斷路徑是否存在
from pathlib import Path
tmp = Path("/Users/aaron/tmp")
tmp.exists()
顯示資料夾的內容
from pathlib import Path
tmp = Path("/Users/aaron/tmp")
list(tmp.iterdir())
Path().iterdir 返回的是一個生成器,這在目錄內檔案特別多的時候可以大大節省記憶體,提升效率。
os 不支援含有萬用字元的路徑,但 pathlib 可以
list(Path("/tmp").glob("*.txt"))
便捷的讀寫檔案操作
f = Path('test_dir/test.txt'))
f.write_text('This is a sentence.')
f.read_text()
也可以使用 with 語句
# 讀取檔案
p = Path('setup.py')
with p.open() as f: f.readline()
獲取檔案的元資料
In [56]: p = Path("/Users/aaron/tmp/c.py") In [57]: p.stat() Out[57]: os.stat_result(st_mode=33188, st_ino=35768389, st_dev=16777221, st_nlink=1, st_uid=501, st_gid=20, st_size=20, st_atime=1620633580, st_mtime=1620633578, st_ctime=1620633578) In [58]: p.parts Out[58]: ('/', 'Users', 'aaron', 'tmp', 'c.py') In [59]: p.parent Out[59]: PosixPath('/Users/aaron/tmp') In [60]: p.resolve() Out[60]: PosixPath('/Users/aaron/tmp/c.py') In [61]: p.exists() Out[61]: True In [62]: p.is_dir() Out[62]: False In [63]: p.is_file() Out[63]: True In [64]: p.owner() Out[64]: 'aaron' In [65]: p.group() Out[65]: 'staff' In [66]: p.name Out[66]: 'c.py' In [67]: p.suffix Out[67]: '.py' In [68]: p.suffixes Out[68]: ['.py'] In [69]: p.stem Out[69]: 'c'
路徑的連線 join
很直觀的使用一個 /
直接進行連線路徑
>>> p = PurePosixPath('foo')
>>> p / 'bar'
PurePosixPath('foo/bar')
>>> p / PurePosixPath('bar')
PurePosixPath('foo/bar')
>>> 'bar' / p
PurePosixPath('bar/foo')
也可以使用 joinpath 方法
>>> PurePosixPath('/etc').joinpath('passwd') PurePosixPath('/etc/passwd') >>> PurePosixPath('/etc').joinpath(PurePosixPath('passwd')) PurePosixPath('/etc/passwd') >>> PurePosixPath('/etc').joinpath('init.d', 'apache2') PurePosixPath('/etc/init.d/apache2') >>> PureWindowsPath('c:').joinpath('/Program Files') PureWindowsPath('c:/Program Files')
路徑匹配
>>> PurePath('a/b.py').match('*.py')
True
>>> PurePath('/a/b/c.py').match('b/*.py')
True
>>> PurePath('/a/b/c.py').match('a/*.py')
False
獲取使用者目錄
from pathlib import Path
Path.home()
PosixPath('/Users/aaron')
父目錄的層級獲取
>>> p = PureWindowsPath('c:/foo/bar/setup.py')
>>> p.parents[0]
PureWindowsPath('c:/foo/bar')
>>> p.parents[1]
PureWindowsPath('c:/foo')
>>> p.parents[2]
PureWindowsPath('c:/')
獲取多個檔案字尾
>>> PurePosixPath('my/library.tar.gar').suffixes
['.tar', '.gar']
>>> PurePosixPath('my/library.tar.gz').suffixes
['.tar', '.gz']
>>> PurePosixPath('my/library').suffixes
[]
Windows 風格轉 Posix
>>> p = PureWindowsPath('c:\\windows')
>>> str(p)
'c:\\windows'
>>> p.as_posix()
'c:/windows'
獲取檔案的 uri
>>> p = PurePosixPath('/etc/passwd')
>>> p.as_uri()
'file:///etc/passwd'
>>> p = PureWindowsPath('c:/Windows')
>>> p.as_uri()
'file:///c:/Windows'
判斷是否絕對路徑
>>> PurePosixPath('/a/b').is_absolute()
True
>>> PurePosixPath('a/b').is_absolute()
False
>>> PureWindowsPath('c:/a/b').is_absolute()
True
>>> PureWindowsPath('/a/b').is_absolute()
False
>>> PureWindowsPath('c:').is_absolute()
False
>>> PureWindowsPath('//some/share').is_absolute()
True
檔名若有變化
>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
>>> p.with_name('setup.py')
PureWindowsPath('c:/Downloads/setup.py')
我的小站: dapenson.icucnblogs: www.cnblogs.com/dapenson