You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫中拼接文件名传入open()引发FileNotFoundError的咨询

嘿,我来帮你捋捋这个问题!你遇到的FileNotFoundError不一定是参数类型的问题——虽然你确认了文件名是字符串,但大概率是文件名包含非法字符、目标路径不存在或者权限限制导致的。先给你拆解open()函数调用时的关键参数,再帮你排查常见坑:

一、open()函数的核心必填参数

调用open()时,有两个核心参数是必须明确的:

  • 文件名(file):
    这是你拼接的字符串,但得注意几个细节:
    • 如果用相对路径(比如直接写文件名),Python会在当前工作目录下创建/写入文件。你可以先通过os.getcwd()打印当前工作目录,确认是不是你预期的路径!
    • 文件名不能包含操作系统的非法字符:Windows下是\/:*?"<>|,Linux/macOS下是/。比如如果你的date变量里包含/(像2024/05/20),直接拼接成文件名就会触发错误。
  • 模式(mode):
    因为你要保存的是zip二进制文件,必须用"wb"模式(写入二进制)!如果误用了"w"(文本模式),不仅会导致文件内容损坏,还可能因为编码问题触发异常。
二、针对你的爬虫场景的排查&修复步骤
  1. 先打印并校验拼接后的文件名
    加一行代码输出最终文件名,检查是否有非法字符或路径问题:

    date = "2024-05-20"
    hof = "hof_example"
    az = "az_example"
    filename = f"{date}_{hof}_{az}.zip"
    print(f"待保存文件名:{filename}")  # 直接看输出是否合法
    

    如果发现有非法字符,提前替换掉:

    invalid_chars = '<>:"/\\|?*'
    for char in invalid_chars:
        filename = filename.replace(char, '_')
    
  2. 确认当前工作目录的可写权限
    导入os模块,打印当前路径:

    import os
    print(f"当前工作目录:{os.getcwd()}")
    

    如果这个目录是系统保护路径(比如Windows的C:\Program Files),Python可能没有写入权限,换个普通目录(比如D:\downloads)或者用绝对路径拼接文件名:

    save_dir = "./downloads"
    # 先创建目录(如果不存在)
    os.makedirs(save_dir, exist_ok=True)
    filename = os.path.join(save_dir, f"{date}_{hof}_{az}.zip")
    
  3. 正确的文件写入示例(针对zip下载)
    别忘了你的ziplink要加上https://前缀,否则请求会失败!完整的下载&保存代码参考:

    import requests
    import os
    
    # 拼接并处理文件名
    date = "2024-05-20"
    hof = "hof_value"
    az = "az_value"
    filename = f"{date}_{hof}_{az}.zip"
    invalid_chars = '<>:"/\\|?*'
    for char in invalid_chars:
        filename = filename.replace(char, '_')
    
    # 下载文件
    ziplink = "www.file.io/xyzfile.zip"
    response = requests.get(f"https://{ziplink}", stream=True)
    response.raise_for_status()  # 检查请求是否成功
    
    # 写入文件
    with open(filename, "wb") as f:
        for chunk in response.iter_content(chunk_size=8192):
            f.write(chunk)
    

内容的提问来源于stack exchange,提问作者user1420492

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:37:52