先搞懂:fsutil 到底有多香?
简单说,它是「文件操作瑞士军刀」,解决新手3大痛点:
不用记多个库:告别os和shutil来回切换,一个fsutil搞定所有文件操作
不用写冗余代码:创建文件自动建父目录、下载文件自带进度条,底层细节全帮你处理
函数名超直观:write_file(写文件)、copy_dir(复制目录),看名字就知道怎么用
新手不用纠结原理,就把它当成“文件操作快捷键”,想做什么操作,直接调用对应的函数就行~
第一步:安装+验证(超简单,零踩坑)
1. 安装命令
打开电脑终端(Win+R输入cmd/ Linux/Mac打开Terminal),复制下面命令,按下回车就搞定(已装Python):文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
pip install python-fsutil
2. 验证是否安装成功
复制下面代码运行,能成功创建文件并写入内容就说明没问题:文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
import fsutil
# 一行创建文件并写入内容(上级文件夹不存在会自动创建)
fsutil.write_file("test/hello.txt", "Hello, fsutil!")
print("文件创建成功!")
# 读取文件内容验证
content = fsutil.read_file("test/hello.txt")
print("文件内容:", content) # 输出:Hello, fsutil!
5个核心案例(新手直接抄,复制就能跑)
案例1:创建文件(自动建父目录,不用手动判断)
新手常见写法(用os+open,代码繁琐):文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
import os
file_path = "data/raw/report.txt"
content = "测试内容"
# 1. 获取上级目录路径
dir_path = os.path.dirname(file_path)
# 2. 判断目录是否存在,不存在则创建
if not os.path.exists(dir_path):
os.makedirs(dir_path)
# 3. 写入文件
with open(file_path, "w", encoding="utf-8") as f:
f.write(content)
print("文件创建完成")
fsutil优雅写法(一行搞定,自动建父目录):文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
import fsutil
# 一行搞定:创建文件+写入内容,上级目录不存在自动创建
fsutil.write_file("data/raw/report.txt", "测试内容")
print("文件创建完成")
# 想追加内容?加个append=True
fsutil.write_file("data/raw/report.txt", "追加的内容", append=True)
✅ 新手小贴士:还支持写JSON文件(write_file_json),直接传字典就行,不用手动序列化~文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
案例2:复制/移动/删除文件/目录(不用区分os和shutil)
新手常见写法(复制用shutil,删除用os,记混就报错):文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
import shutil
import os
# 复制文件
shutil.copy("source.txt", "dest.txt")
# 复制目录
shutil.copytree("source_dir", "dest_dir")
# 删除文件
os.remove("file.txt")
# 删除目录(含子文件)
shutil.rmtree("dir")
fsutil优雅写法(函数名统一,直观易懂):文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
import fsutil
# 复制文件
fsutil.copy_file("source.txt", "dest.txt")
# 复制目录(自动处理已存在目录的情况)
fsutil.copy_dir("source_dir", "dest_dir")
# 移动文件/目录(通用一个函数)
fsutil.move("source.txt", "new_dir/source.txt")
# 删除文件
fsutil.remove_file("file.txt")
# 删除目录(含子文件,安全无残留)
fsutil.remove_dir("dir")
# 清空目录内容(保留目录本身)
fsutil.clean_dir("empty_me_dir")
✅ 新手小贴士:所有操作都有明确的函数名,不用再查“复制目录用哪个函数”,新手零记忆成本~文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
案例3:下载文件(自带进度条,不用写流式处理)
新手常见写法(用requests,代码冗余):文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
import requests
url = "https://example.com/large_file.zip"
save_path = "downloads/file.zip"
# 流式下载,避免占用过多内存
response = requests.get(url, stream=True)
with open(save_path, "wb") as f:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
print("下载完成")
fsutil优雅写法(一行搞定,自带进度条):文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
import fsutil
# 一行下载文件,自动创建下载目录,终端显示进度条
url = "https://example.com/large_file.zip"
save_path = fsutil.download_file(url, dirpath="downloads", filename="file.zip")
print(f"下载完成!文件路径:{save_path}")
✅ 新手小贴士:下载大文件时会显示进度条,知道下载进度,不用焦虑等待~文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
案例4:计算文件/目录哈希值(校验文件完整性)
新手常见写法(用hashlib,手动读文件,代码复杂):文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
import hashlib
def get_file_hash(file_path):
md5 = hashlib.md5()
with open(file_path, "rb") as f:
while chunk := f.read(4096):
md5.update(chunk)
return md5.hexdigest()
print("文件MD5:", get_file_hash("file.zip"))
fsutil优雅写法(一行搞定,支持文件/目录):文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
import fsutil
# 计算单个文件的MD5哈希值(校验文件是否损坏)
file_hash = fsutil.get_file_hash("file.zip")
print("文件MD5:", file_hash)
# 计算整个目录的哈希值(校验目录内容是否一致)
dir_hash = fsutil.get_dir_hash("downloads")
print("目录MD5:", dir_hash)
✅ 新手小贴士:哈希值用于校验文件完整性,比如下载文件后对比哈希值,确认没下载出错~文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
案例5:文件/目录常用查询(不用记os.path的一堆函数)
新手常见写法(用os.path,函数零散):文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
import os file_path = "test.txt" # 判断文件是否存在 print(os.path.exists(file_path)) # 获取文件大小(字节) print(os.path.getsize(file_path)) # 获取文件后缀 print(os.path.splitext(file_path)[1]) # 获取上级目录 print(os.path.dirname(file_path))
fsutil优雅写法(函数名直观,统一调用):文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
import fsutil
file_path = "test.txt"
# 判断文件/目录是否存在
print(fsutil.exists(file_path))
# 获取文件大小(支持转换单位:KB/MB/GB)
print(fsutil.get_file_size(file_path, unit="MB")) # 输出:0.001 MB
# 获取文件后缀
print(fsutil.get_file_extension(file_path)) # 输出:.txt
# 获取上级目录
print(fsutil.get_parent_dir(file_path))
# 判断目录是否为空
print(fsutil.is_empty("empty_dir"))
✅ 新手小贴士:支持单位转换,不用自己算1MB=1024KB,直接传unit="KB"/"MB"就行~文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
新手常见问题&避坑指南
1. fsutil和pathlib有什么区别?
Path("test.txt")),适合复杂路径解析;2. 支持Windows/Linux/Mac吗?
完全支持!跨平台兼容,Windows的C:/、Linux的/home/路径都能正常识别,不用改代码~文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
3. 下载文件需要额外安装什么吗?
需要安装requests(下载依赖),终端执行pip install requests即可,安装一次终身受益~文章源自爱尚资源教程网-https://www.23jcw.net/12138.html
