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.expanduserandPath.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)
