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

Python for循环中如何正确参数化文件路径的年份变量

问题根因
  • 你代码中output_file参数里写的"E:\\y\\"是固定字符串字面量,包裹在引号里的y只是普通英文字符,不会被解析为函数传入的年份参数y,程序运行时会直接查找E盘下名为y的文件夹,自然匹配不到按年份命名的目录。
  • 就算修正了路径拼接逻辑,只要对应年份的文件夹没有提前创建,写入CSV时依然会触发FileNotFoundError,Python默认不会自动创建路径中缺失的中间目录。
推荐实现(pathlib 标准库方案)

用Python3.4+自带的pathlib处理路径不需要手动转义分隔符,跨平台兼容性好,代码可读性更高,修正后的完整代码如下:

from pathlib import Path
from joblib import Parallel, delayed

# 原有专利数据抓取逻辑保持不变
def get_bulk_patent_data(y, w, output_file):
    pass

def download_data(y):
    # 拼接对应年份的文件夹路径
    year_dir = Path("E:/") / str(y)
    # 自动创建不存在的年份文件夹,已存在则跳过不报错
    year_dir.mkdir(exist_ok=True)
    # 遍历周数生成任务,自动拼接每个CSV的完整路径
    Parallel(n_jobs=1)(
        delayed(get_bulk_patent_data)(
            y,
            w,
            output_file=str(year_dir / f"df{y}w{w}a.csv")
        ) for w in range(1, 3)
    )

YEARS = [2021, 2022]
for y in YEARS:
    download_data(y)
备选实现(os 模块方案)

如果你更熟悉os模块的路径操作,也可以用下面的写法,运行效果完全一致:

import os
from joblib import Parallel, delayed

# 原有专利数据抓取逻辑保持不变
def get_bulk_patent_data(y, w, output_file):
    pass

def download_data(y):
    year_dir = os.path.join("E:\\", str(y))
    # 自动创建不存在的年份文件夹
    os.makedirs(year_dir, exist_ok=True)
    Parallel(n_jobs=1)(
        delayed(get_bulk_patent_data)(
            y,
            w,
            output_file=os.path.join(year_dir, f"df{y}w{w}a.csv")
        ) for w in range(1, 3)
    )

YEARS = [2021, 2022]
for y in YEARS:
    download_data(y)
关键注意点
  • 所有需要动态替换的变量不能直接写在引号包裹的字符串内部,要通过路径拼接方法、f-string等方式把变量值插入到路径中。
  • 写入文件前必须先确认目标文件所在的文件夹存在,否则一定会触发路径不存在的报错。
  • f-string拼接变量的写法比多次用+拼接字符串更简洁,不容易出现漏转义、漏拼接的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:42:09