python3.4-
之前路径相关的操作都放在os
中, 基本集中在o.path
os(os.path)
与 pathlib
的对比
os and os.path | pathlib |
---|---|
os.path.abspath |
Path.resolve |
os.chmod |
Path.chmod |
os.mkdir |
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 and Path.home |
os.path.isdir |
Path.is_dir |
os.path.isfile |
Path.is_file |
os.path.islink |
Path.is_symlink |
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 |
import os
from pathlib import Path
print(os.path.abspath(__file__))
print(Path(__file__).resolve())
print(os.path.isdir(os.getcwd()))
print(Path.cwd().is_dir())
print(os.path.basename(os.path.abspath(__file__)))
print(Path(__file__).resolve().name)
python中pathlib模块处理文件路径
py3.6 +
之前的文件处理都是使用 os
+ os.path
# 修改文件后缀
base_dir = os.path.dirname(os.path.abspath(__file__))
1 )
import os, sys
for filename in os.listdir(base_dir):
base_name, ext = os.path.splitext(filename)
if ext == '.txt':
os.rename(filename, os.path.join(path, f'{basename}.csv'))
2)
from pathlib import Path
for fpath in Path(base_dir).glob('*.txt'):
fpath.rename(fpath.with_suffix('.csv'))
# 组合文件路径
1)
path_ = os.path.join(base_dir, 'foo.txt')
2)
path__ = Path(base_dir) / 'foo.txt'
# 读取文件内容
1) with open('foo.txt', encoding='utf-8') as file:
print(file.read())
2) print(Path('foo.txt').read_text(encoding='utf-8'))
/
用来拼接 路径 vs os.path.join
import os
from pathlib import Path
p = os.path.join("home", "your/code")
p2 = Path("/").joinpath("home", "your/code") # /home/your/code
p3 = "/" / Path("home") / Path("your/code")
p1 = Path("home") / Path("your/code")
p3 = Path("/") / Path("home") / Path("your/code")
print(p3)
文件的前后缀 suffix/stem
Path().suffix
Path().stem
import os
from pathlib import Path
base = os.path.basename(os.path.abspath(__file__))
stem, suffix = os.path.splitext(base)
print(stem, suffix )
base = Path(__file__).resolve()
print(base.suffix, base.stem)
# 当文件有多个后缀,可以用suffixes返回文件所有后缀列表:
Path('my.tar.bz2').suffixes
['.tar', '.bz2']
其他的使用方法
touch
方法
Path().touch()
Python 语言没有内置创建文件的方法 (linux 下的 touch 命令)
# 过去需要使用文件句柄操作
with open('new.txt', 'a') as f:
...
# 可以直接使用 Path
Path('new.txt').touch()
touch 接受mode参数
,能够在创建时确认文件权限
,
还能通过exist_ok
参数方式确认是否可以重复 touch
(默认可以重复创建,会更新文件的 mtime)
home
获取用户的 home 目录
Path.home()
os.path.expanduser('~')
Path.home()
owner
获取当前文件的用户*nux系统
import pwd
pwd.getpwuid(os.stat('/usr/local/etc/my.cnf').st_uid).pw_name
p.owner()
创建多级目录
Path().mkdir(parents=True)
Path('1/2/3').mkdir(parents=True)