Python读取txt存储的图片URL批量下载报OSError错误如何解决?
Windows下Python批量下载txt中URL图片的解决方案
错误原因
- 调用
readline()读取每行URL时,会自动带上行尾的换行符\n,拆分得到的文件名末尾会多出来\n字符,Windows系统不允许文件名包含换行符,直接触发OSError 22报错。 - 原代码的
while True循环没有退出逻辑,所有URL读取完成后会继续执行空读取逻辑,后续也会触发请求异常。 - 打开的txt文件没有显式关闭,存在资源占用问题。
修正后的可运行代码
import requests import shutil # 用with语法打开url文件,自动处理关闭 with open("test.txt", "r", encoding="utf-8") as f: # 逐行迭代读取,自动处理读取终止 for image_url in f: # 去除首尾空白字符(包含换行符、首尾空格) image_url = image_url.strip() # 跳过空行 if not image_url: continue # 拆分文件名 filename = image_url.split("/")[-1] # 发送请求下载 r = requests.get(image_url, stream=True) # 增加请求成功判断,避免下载无效内容 if r.status_code == 200: r.raw.decode_content = True with open(filename, 'wb') as img_f: shutil.copyfileobj(r.raw, img_f) print(f"{filename} 下载完成") else: print(f"{image_url} 下载失败,状态码:{r.status_code}")
额外优化说明
- 增加了请求状态码判断,避免URL无效时写入空文件
- 增加了空行跳过逻辑,适配txt中存在空行的场景
- 增加了下载状态提示,方便查看执行情况
内容的提问来源于stack exchange,提问作者Leearn2303
相关产品推荐
相关产品推荐

