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

Python项目如何修改下载文件存放路径 解决移动到桌面报错WinError31/32问题

错误原因与解决方案

错误触发根源

  • WinError 32:目标音乐文件正被其他进程占用,wget下载完成后未及时释放文件句柄,或是本地杀毒软件、媒体预览程序正在扫描刚下载的文件,都会触发该类报错
  • WinError 31:os.rename()不支持跨磁盘分区移动文件,如果你的项目存放目录和桌面不在同一个盘符(比如项目在D盘、桌面默认归属C盘),就会触发该错误
  • 原有代码存在逻辑漏洞:wget.download()返回的是字符串类型的文件名,原有判断filename != []永远为真,即便下载失败也会强制执行移动操作,进一步提升了报错概率

修复方案

  1. 替换移动文件API:用shutil.move()替代os.rename(),前者原生支持跨盘符移动,兼容性更强
  2. 增加文件句柄释放等待逻辑:下载完成后增加短暂延迟,避免wget还未释放文件就执行移动操作
  3. 修正移动逻辑判断:只有确认下载完成、源文件存在的情况下才执行移动操作

修复后完整代码

import wget, os, requests, webbrowser, shutil, time

def visitWeb(myLink):
    url = myLink
    webbrowser.register('firefox',None,webbrowser.BackgroundBrowser(myFireFoxDirecoty))
    webbrowser.get('firefox').open(url)

callMe = input('insert a link :')
r = requests.get(callMe)
visitWeb(callMe)
filename = ""
if r.status_code == 200:
    print('url is ok')
    url = 'http://www.futurecrew.com/skaven/song_files/mp3/razorback.mp3'
    filename = wget.download(url)
    # 等待1秒确保文件句柄释放
    time.sleep(1)
# 确认文件存在再执行移动
if filename and os.path.exists(source):
    shutil.move(source, desktop)
    print('finished downloading')

注:代码中myFireFoxDirecoty、source、desktop为路径占位符,请替换为你本地的实际路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:48:02