python3.4 新增模块,可以处理路径和文件相关操作。
目录:
from pathlib import Path
# 从字符串创建
Path('/home/user/data.txt') # /home/user/data.txt
# 当前 python 文件的路径
Path(__file__) # /Users/dkvirus/Documents/test_sample.py
# 当前 python 文件的父级目录
Path(__file__).parent # /Users/dkvirus/Documents
# 当前 python 文件的父级目录的父级目录
Path(__file__).parent.parent # /Users/dkvirus
# 当前工作目录
Path.cwd() # /Users/dkvirus/Documents
# 用户主目录
Path.home() # /Users/dkvirus
p = Path('/home/user/project/src/main.py')
print(p.name) # 'main.py', 文件名
print(p.stem) # 'main', 不带后缀的文件名
print(p.suffix) # '.py', 文件扩展名
print(p.parent) # /home/user/project/src,父目录
print(p.parts) # ('/', 'home', 'user', 'project', 'src', 'main.py'),路径各部分元组
print(p.anchor) # '/',锚点(如Windows的驱动器)
使用 / 运算符可以轻松拼接路径
base = Path('/usr')
config_path = base / 'local' / 'etc' / 'app.conf'
print(config_path) # /usr/local/etc/app.conf
可以方便地检查路径是否存在及其类型。
p = Path('some_file.txt')
if p.exists(): # 判断路径是否存在
if p.is_file():
print("这是一个文件")
elif p.is_dir():
print("这是一个目录")
if p.is_symlink():
print("这是一个符号链接")
使用 mkdir(),parents=True 可创建多级父目录,exist_ok=True 可避免目录已存在时报错
Path('new_dir/sub_dir').mkdir(parents=True, exist_ok=True)
Path('empty_dir').rmdir() # 删除空目录
iterdir(): 遍历当前目录下的条目。
glob(): 使用通配符模式匹配文件。
rglob(): 递归地使用通配符匹配文件
for item in Path('.').iterdir():
print(item.name)
for py_file in Path('src').glob('*.py'): # 递归查找所有 .py 文件
print(py_file)
for txt_file in Path('.').rglob('*.txt'): # 递归查找所有 .txt 文件
print(txt_file)
递归 ./data 目录,修改文件名。
如下示例:旧的文件 get_listtins.json 单词拼写错误,需要修改为 get_listings.json。
from pathlib import Path
def rename_files_recursively(root_dir: Path):
# 定义要查找的原始文件名和新文件名
old_filename = "get_listtins.json"
new_filename = "get_listings.json"
for file_path in root_dir.rglob(old_filename):
try:
parent_dir = file_path.parent
new_file_path = parent_dir / new_filename
if new_file_path.exists():
print(f"警告:目标文件已存在,跳过重命名:{file_path}")
continue
file_path.rename(new_file_path)
print(f"已重命名:{file_path} -> {new_file_path}")
except Exception as e:
print(f"重命名失败:{file_path},错误:{e}")
if __name__ == "__main__":
# 设置要遍历的根目录
data_dir = Path("./data")
# 执行重命名操作
rename_files_recursively(data_dir)
print("-" * 50)
print("重命名操作完成")
Path 对象提供了便捷的读写方法
p = Path('hello.txt')
p.write_text('Hello, World!') # 写入文本
content = p.read_text() # 读取文本
p.write_bytes(b'Binary data') # 写入字节
data = p.read_bytes() # 读取字节
写入/读取 json 文件。
import json
from pathlib import Path
p = Path('./test.json')
# 写入 json 文件
p.write_text(json.dumps({
"name": "dkvirus",
"age": 31,
}))
# 读取 json 文件
print(json.loads(p.read_text()))
使用 touch() 方法可以创建一个空文件,如果文件已存在,可通过 exist_ok=True 参数控制是否报错。
Path('newfile.txt').touch(exist_ok=True)
Path('file_to_delete.txt').unlink() # 删除文件
使用 stat() 方法可以获取文件的详细信息(如大小、修改时间),类似于 os.stat()。
stat_info = Path('some_file').stat()
print(f"大小: {stat_info.st_size} 字节")
print(f"最后修改: {datetime.fromtimestamp(p.st_mtime).strftime('%Y-%m-%d %H:%M:%S')}")
使用 rename() 方法可以重命名文件。
p = Path('./test.json')
p.rename('test2.json')
↶ 返回首页 ↶