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

调用Google Drive API下载文件后重命名报错PermissionError问题咨询

错误触发原因
  • 直接原因是你创建的io.FileIO文件对象没有被关闭,临时文件just-temp.txt的句柄一直被当前Python进程占用,Windows系统禁止对处于占用状态的文件执行重命名操作,因此抛出你遇到的权限错误。
  • 你当前写法中直接把io.FileIO(txtfile_tmp_name, 'wb')作为参数传入MediaIoBaseDownload,没有保留对象引用也没有手动执行关闭操作,下载完成后文件资源没有被释放,直接执行os.rename就会触发冲突。
修复方法

最稳妥的方案是使用Python上下文管理器(with语句)自动管理文件生命周期,文件读写完成后会自动释放资源,修改下载部分的代码即可:

# 替换原有downloader相关的全部代码
with io.FileIO(txtfile_tmp_name, 'wb') as tmp_file:
    downloader = MediaIoBaseDownload(
        tmp_file,
        service.files().export_media(fileId=res['id'], mimeType="text/plain")
    )
    done = False
    while done is False:
        status, done = downloader.next_chunk()

如果不想调整代码结构,也可以选择手动关闭文件句柄:

# 手动管理文件句柄写法
tmp_file = io.FileIO(txtfile_tmp_name, 'wb')
downloader = MediaIoBaseDownload(
    tmp_file,
    service.files().export_media(fileId=res['id'], mimeType="text/plain")
)
done = False
while done is False:
    status, done = downloader.next_chunk()
# 下载完成后显式关闭文件
tmp_file.close()
可选优化建议
  • 可以给临时文件名增加随机后缀(比如UUID、时间戳),避免多任务处理或者上次执行异常残留临时文件导致的冲突
  • 重命名前可以先校验临时文件的大小和完整性,避免网络中断导致的不完整文件被重命名为最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 00:54:02