Python实现目录内文件名添加前缀问题求助
解决文件重命名错误并集成到下载解压流程
问题根源
你代码里的问题出在两点:
- 直接把完整路径对象拼进前缀,导致新文件名包含整个路径字符串
- 用
os.path.join(file, dst)时,把原文件的完整路径当成了目录,生成的目标路径是「原文件路径\前缀+原完整路径」,完全不符合Windows文件系统规则,所以触发OSError。
正确的重命名实现
用pathlib的API可以更直观地处理路径,避免拼接错误:
import pathlib # 目标目录 target_dir = pathlib.Path(r'C:\Users\UserName\Desktop\Wells') # 遍历所有符合*WaterWells.*规则的文件 for file in target_dir.glob("*WaterWells.*"): # 仅给文件名加前缀,不是完整路径 new_filename = f"County_{file.name}" # 拼接原目录+新文件名,得到正确的目标路径 new_file_path = file.parent / new_filename # 执行重命名 file.rename(new_file_path)
这段代码会把Alcona_WaterWells.cpg重命名为County_Alcona_WaterWells.cpg,完全符合你的需求。
集成到下载解压循环的完整示例
如果要把重命名逻辑和下载、解压流程整合,以下是完整的实现(假设下载的是ZIP压缩包):
import pathlib import requests from zipfile import ZipFile from io import BytesIO # 配置参数 download_urls = [ "第一个文件的下载链接", "第二个文件的下载链接" ] target_dir = pathlib.Path(r'C:\Users\UserName\Desktop\Wells') # 确保目标目录存在,不存在则创建 target_dir.mkdir(exist_ok=True) # 批量下载、解压并处理重命名 for url in download_urls: # 下载文件 response = requests.get(url) response.raise_for_status() # 下载失败时直接抛出异常 # 解压到目标目录 with ZipFile(BytesIO(response.content)) as zip_ref: zip_ref.extractall(target_dir) # 解压完成后立即重命名符合规则的文件 for file in target_dir.glob("*WaterWells.*"): new_filename = f"County_{file.name}" new_file_path = file.parent / new_filename file.rename(new_file_path)
如果你的下载源不是ZIP,而是其他格式(如RAR),可以替换对应的解压库(比如patool),核心逻辑保持一致:下载→解压→遍历重命名。
内容的提问来源于stack exchange,提问作者redleg_64
相关产品推荐
相关产品推荐

