Path相关操作,主要为文件属性,路径目录等
点击查看代码
def _Path():from pathlib import Pathimport shutil# 创建 Path 对象print(Path().absolute())p = Path("data/example.txt")p1 = Path("data/dir")# Path("data") / "data1" /Path("data2.txt") 拼接路径,字符串和Path对象也可以直接这样拼接# p.resolve(),通过传入文件名,返回文件的完整路径。# p.name,可以获取文件的名字,包含后缀名。# p.parent,返回文件所在文件夹的名字。# p.stem,获取文件名不包含后缀名。# p.suffix,获取文件的后缀名。# p.anchor,获取文件所在的盘符。# p.stat().st_mtime,获取文件大小# p.as_posix() 路径统一为正斜杠,建议任何时候都转换为这种print(p.resolve())# 检查路径if p.exists():if p.is_file():print(f"{p} 是一个存在的文件")if p.is_dir():print(f"{p} 是一个存在的路径文件夹")else:# 创建目录Path("data/dir").mkdir(parents=True,exist_ok=True)# 创建文件,创建的是空文件所以只有几种可以文本文件 (.txt, .log, .md, .py),csv文件,html可以,其他的excel,图像文件,压缩包,等都不行,p.touch(parents=True,exist_ok=True)# 删除文件p.unlink(missing_ok=True)# 删除非空目录,Path无法做到,需要用shutilshutil.rmtree(p1)# 删除空目录p1.rmdir()# 遍历当前目录for file in Path("data").iterdir():print('file',file)if file.is_file():print(f"文件: {file.name}")# 递归遍历for item in Path("data").rglob("*"):if item.is_dir():print(f'文件夹:{item.name}/')else:# 分割路径,可以筛选是否需要的目录,例如只想在二级目录筛选则换成path_parts[1]即可path_parts = item.partsif '7.Tutorial' in path_parts:continue# 定义原文件和新文件路径old_file = Path("old_name.txt")new_file = Path("new_name.txt")# 执行重命名,需要注意目录重命名会连带其所有子文件和子目录一起更名,谨慎重命名不是最下级的目录old_file.rename(new_file)
文件读取写入的相关操作
点击查看代码
```python
def _file():import json# 文本模式'r' # 只读(默认)'w' # 写入(覆盖)'a' # 追加'x' # 独占创建(文件存在则报错)'r+' # 读写'w+' # 读写(覆盖)'a+' # 读写(追加)'b' # 二进制模式标志(与其他模式组合)# 二进制模式'rb' # 二进制只读'wb' # 二进制写入'ab' # 二进制追加'xb' # 二进制独占创建'r+b' # 二进制读写'w+b' # 二进制读写(覆盖)'a+b' # 二进制读写(追加)# 方法1: read() - 读取全部内容with open('text_file.txt', 'r', encoding='utf-8', errors="ignore") as file:content = file.read()print(content)# 方法3: readlines() - 读取所有行到列表with open('text_file.txt', 'r', encoding='utf-8') as file:lines = file.readlines()for i, line in enumerate(lines, 1):print(f"第{i}行: {line}", end='')# 方法4: 逐行迭代(内存友好)with open('text_file.txt', 'r', encoding='utf-8') as file:for line_number, line in enumerate(file, 1):print(f"第{line_number}行: {line}", end='')# 方法5: 读取指定字节数with open('text_file.txt', 'r', encoding='utf-8') as file:chunk = file.read(100) # 读取前100个字符print(chunk)# 方法1: write() - 写入字符串with open('output.txt', 'w', encoding='utf-8') as file:file.write('第一行内容\n')file.write('第二行内容\n')file.write('第三行内容')# 方法2: writelines() - 写入字符串列表lines = ['第一行\n', '第二行\n', '第三行\n']with open('output.txt', 'w', encoding='utf-8') as file:file.writelines(lines)# 方法3: 高效写入多行data = ['苹果', '香蕉', '橙子', '葡萄']with open('fruits.txt', 'w', encoding='utf-8') as file:file.write('\n'.join(data))# 方法4: 追加写入with open('log.txt', 'a', encoding='utf-8') as file:file.write('2024-01-01 10:00:00 - 程序启动\n')file.write('2024-01-01 10:05:00 - 处理完成\n')# 网络上下载二进制对象res = requests.get(url='url',)with open('test2.jpg', 'wb') as file:file.write(res.content)# 读取二进制对象并写入新对象with open('apple.png', 'rb') as src_file:with open('apple1.png', 'wb') as dst_file:# 方法1: 一次性复制(小文件)# dst_file.write(src_file.read())# 方法2: 分块复制(大文件推荐)while True:chunk = src_file.read(8192)if not chunk:breakdst_file.write(chunk)import mimetypes# 获取文件类型,image/pngmime_type, _ = mimetypes.guess_type('apple.png')def encode_image(image_path):# 获取文件的base64,常用来上传网络的都会转成base64编码import base64with open('apple.png', "rb") as image_file:return base64.b64encode(image_file.read()).decode("utf-8")# 读取JSON文件def read_json_file(file_path):"""读取JSON文件"""with open(file_path, 'r', encoding='utf-8') as file:data = json.load(file)return data# 写入JSON文件def write_json_file(file_path, data, indent=2):"""写入JSON文件"""with open(file_path, 'w', encoding='utf-8') as file:json.dump(data, file, ensure_ascii=False, indent=indent)# 漂亮的JSON输出def write_pretty_json(file_path, data):"""写入格式化的JSON"""with open(file_path, 'w', encoding='utf-8') as file:json.dump(data, file, ensure_ascii=False, indent=2, sort_keys=True)
</details>