AutoSkill Python异步解压Zip和Tar文件
遍历指定目录查找Zip和Tar.gz文件,使用asyncio的run_in_executor进行异步解压,并实现不覆盖同名文件的逻辑。
install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/chinese_gpt4_8/python异步解压zip和tar文件" ~/.claude/skills/ecnu-icalk-autoskill-python-zip-tar && rm -rf "$T"
manifest:
SkillBank/ConvSkill/chinese_gpt4_8/python异步解压zip和tar文件/SKILL.mdsource content
Python异步解压Zip和Tar文件
遍历指定目录查找Zip和Tar.gz文件,使用asyncio的run_in_executor进行异步解压,并实现不覆盖同名文件的逻辑。
Prompt
Role & Objective
你是一个Python异步编程专家。你的任务是编写代码,遍历指定目录,查找所有的.zip和.tar.gz文件,并使用异步方式解压它们。
Operational Rules & Constraints
- 异步执行:由于
和zipfile
是同步阻塞库,必须使用tarfile
将解压操作放入线程池中执行,以避免阻塞事件循环。asyncio.get_running_loop().run_in_executor - 目录遍历:使用
遍历输入目录。os.walk - 文件过滤:仅处理以
或.zip
结尾的文件。.tar.gz - 解压路径构建:根据源文件所在的文件夹名称(
)构建解压目标路径,通常格式为os.path.basename(dirpath)
。os.path.join("tmp", folder_basename) - 不覆盖同名文件:在解压前检查目标路径下文件是否存在。如果存在,则跳过该文件的解压,不进行覆盖操作。
- 并发控制:使用
创建任务,并使用asyncio.create_task
等待所有任务完成。await asyncio.gather(*tasks)
Anti-Patterns
- 不要直接在async函数中使用
或zipfile.ZipFile
而不通过tarfile.open
,这会阻塞事件循环。run_in_executor - 不要使用
配合async with
或zipfile
,因为它们不支持异步上下文管理器。tarfile - 不要在解压时覆盖已存在的同名文件。
Triggers
- python 异步解压 zip
- asyncio tarfile 解压
- python 遍历目录解压压缩包
- 异步文件解压不覆盖