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

Python重命名TXT文件遇PermissionError:文件被占用无法修改

解决重命名文件时的PermissionError问题

错误原因

你碰到的PermissionError: [WinError 32]是因为文件还被当前代码的打开进程占用——代码里用with open(arquivo, "a+")打开文件后,在with代码块内直接执行os.rename,此时文件处于未关闭状态,系统不允许修改它的文件名。

另外代码还有两个小问题:

  • os.listdir只返回文件名,没有完整路径,如果你的Python脚本不在C:\Users\{id}\OneDrive\Onedrive - GPA目录下,会找不到要操作的文件
  • 代码末尾有一行重复的caminho_remuneracao = os.listdir(...),属于冗余代码,需要删掉

修正后的代码

import os
from datetime import date

id = 4577809
data_hoje = date.today().strftime('%Y%m%d')
data = date.today().strftime('%d%m%Y')

# 定义目标文件夹的完整路径
pasta_alvo = f"C:\\Users\\{id}\\OneDrive\\Onedrive - GPA"
caminho_remuneracao = os.listdir(pasta_alvo)

for arquivo in caminho_remuneracao:
    if 'GPARH_0030' in arquivo and data in arquivo:
        # 拼接文件的完整路径
        caminho_completo = os.path.join(pasta_alvo, arquivo)
        # 先读取文件内容,读完自动关闭
        with open(caminho_completo, "r") as arq:
            linhas = arq.readline()
            linha = linhas[5:19]
        # 文件关闭后再执行重命名
        novo_nome = f'GPA_PEDD_{linha}_{data}.txt'  # 建议加上文件后缀,避免丢失格式
        novo_caminho = os.path.join(pasta_alvo, novo_nome)
        os.rename(caminho_completo, novo_caminho)
        print(f'arquivo {arquivo} renomeado para {novo_nome}')

额外说明

  • 把打开模式从a+改成r,因为你只需要读取文件首行,不需要追加内容,r模式更安全
  • 手动拼接完整路径,避免因工作目录不一致导致的文件找不到问题
  • 建议给新文件名加上.txt后缀,防止重命名后丢失文件格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:30:38