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
相关产品推荐
相关产品推荐

