如何适配不同用户,基于部分文件名查找Downloads目录下的Zip文件并解压?
解决方法
原代码出错原因
你写的/Downloads/file.zip是系统根目录下的路径,而普通用户的Downloads目录在用户主目录里,自然找不到文件。
步骤1:定位正确的Downloads目录
不管哪个用户,用下面两种方式都能拿到正确的Downloads路径:
- 用
os.path.expanduser("~/Downloads")(兼容所有Python版本) - 用
Path.home() / "Downloads"(Python 3.4+推荐,写法更简洁)
步骤2:匹配含指定关键词的Zip文件
用通配符匹配文件名,比如要找包含file的Zip文件,就用*file*.zip(*代表任意字符)。可以用glob模块或者pathlib的glob方法批量查找。
完整代码示例
写法1:用os和glob模块
import zipfile import os import glob # 获取用户的Downloads目录 downloads_dir = os.path.expanduser("~/Downloads") # 替换这里的"file"为你要匹配的部分文件名 zip_pattern = os.path.join(downloads_dir, "*file*.zip") matched_zips = glob.glob(zip_pattern) # 处理找不到或多个匹配的情况 if not matched_zips: raise FileNotFoundError("没找到符合条件的Zip文件") elif len(matched_zips) > 1: print(f"找到多个匹配文件,将处理第一个:{matched_zips[0]}") # 解压第一个匹配的文件到指定位置(location需提前定义) with zipfile.ZipFile(matched_zips[0], "r") as z: z.extractall(location)
写法2:用pathlib(更现代简洁)
import zipfile from pathlib import Path # 获取用户Downloads目录 downloads_dir = Path.home() / "Downloads" # 替换"file"为你要匹配的部分文件名 matched_zips = list(downloads_dir.glob("*file*.zip")) if not matched_zips: raise FileNotFoundError("没找到符合条件的Zip文件") elif len(matched_zips) > 1: print(f"找到多个匹配文件,将处理第一个:{matched_zips[0]}") # 解压文件,location可以是字符串或Path对象 with zipfile.ZipFile(matched_zips[0], "r") as z: z.extractall(location)
注意事项
- 把
*file*.zip里的file换成你实际要匹配的关键词,比如找带report的Zip就写*report*.zip location要提前指定,比如location = "./解压后的文件夹"或者其他绝对路径- 如果有多个匹配文件,代码默认取第一个,你可以加逻辑让用户选择或批量处理
内容的提问来源于stack exchange,提问作者Mathéo Pérez
相关产品推荐
相关产品推荐

