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

Python调用Unsplash API做壁纸脚本,多次下载文件名自动加(1)后缀是为何?

问题根源

文件名自动追加(1)序号是wget库的默认机制导致的:当指定的保存路径已存在同名文件时,wget不会主动覆盖旧文件,会自动在文件名后加序号规避冲突,进而出现每次下载都会生成新的带后缀文件名的情况。

修复方案

只需在每次下载新壁纸前,删除已存在的旧壁纸文件即可,同时可以补充tmp目录不存在的兼容逻辑,避免首次运行报错,修改后的完整代码如下:

# 导入依赖
import os
import requests
import wget
import ctypes
import time

from config import UNSPLASH_ACCESS_KEY


def get_wallpaper():
    # 先判断tmp目录是否存在,不存在则创建
    if not os.path.exists('tmp'):
        os.mkdir('tmp')
    # 先删除已存在的旧壁纸,避免wget自动重命名
    save_path = 'tmp/wallpaper.jpg'
    if os.path.exists(save_path):
        os.remove(save_path)
    # 构造API请求参数
    url = 'https://api.unsplash.com/photos/random?client_id=' + UNSPLASH_ACCESS_KEY
    params = {
        "query": "HD Wallpapers",
        "orientation": "landscape"
    }
    # 发送请求,获取图片直链
    response = requests.get(url, params=params).json()
    image_url = response['urls']['full']
    # 下载图片到指定路径
    image = wget.download(image_url, save_path)
    return image


def change_wallpaper():
    get_wallpaper()
    # 用os.path.join拼接路径,避免不同系统路径分隔符不兼容问题
    path = os.path.join(os.getcwd(), 'tmp', 'wallpaper.jpg')
    ctypes.windll.user32.SystemParametersInfoW(20, 0, path, 3)

def main():
    try:
        while True:
            change_wallpaper()
            # 测试可以用10秒,实际使用建议改成3600秒(1小时)换一次
            time.sleep(10)
    except KeyboardInterrupt:
        print("\n感谢使用,再见!")
    except Exception as e:
        print(f"运行出错:{e}")


if __name__ == "__main__":
    main()

可选优化方案

如果不想依赖wget库,也可以直接用requests把图片内容写入指定文件,逻辑更可控,也不会出现自动重命名的问题,替换get_wallpaper里的下载逻辑即可:

# 替换原有wget.download的部分
img_resp = requests.get(image_url)
with open(save_path, 'wb') as f:
    f.write(img_resp.content)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:54:04