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

使用os.rename批量重命名文件时遇WinError 123语法错误求助

问题分析与解决方案

错误根源

  1. 换行符污染文件名:readlines()会保留每行末尾的\n,导致生成的目标文件名包含非法换行字符,Windows系统不允许文件名存在这类字符,触发WinError 123。
  2. 名称读取方式错误:你的Names.txt是空格分隔的名称,readlines()会把整个内容读成单个字符串元素,无法直接通过索引获取单个名称。
  3. 索引起始值错误:列表索引从0开始,但你设置count = 1,会导致索引错位甚至越界。
  4. 路径拼接不规范:直接用+拼接路径容易出现斜杠问题,且未处理子文件夹的情况。

修正后的代码

import os

# 读取Names.txt,按空格拆分名称并清理空白字符
with open("Names.txt", "r") as f:
    content = f.read().strip()
    names = content.split()

folder = r'C:\Users\e007l\Desktop\Rename'

# 过滤出文件夹中的文件(排除子文件夹)
files = [f for f in os.listdir(folder) if os.path.isfile(os.path.join(folder, f))]

# 确保名称数量和文件数量匹配,避免索引越界
if len(names) != len(files):
    print("错误:Names.txt中的名称数量与文件夹内文件数量不匹配")
else:
    # 遍历文件和对应的名称
    for idx, file_name in enumerate(files):
        source = os.path.join(folder, file_name)
        # 如果要保留原文件扩展名,替换下面两行注释内容
        # ext = os.path.splitext(file_name)[1]
        # destination = os.path.join(folder, f"{names[idx]}{ext}")
        # 统一改为txt扩展名
        destination = os.path.join(folder, f"{names[idx]}.txt")
        os.rename(source, destination)
    
    # 打印重命名后的文件列表
    print(os.listdir(folder))
    print(folder)

关键改进点

  • 正确读取名称:用read().strip()读取整个文件内容并去掉首尾空白,再用split()按空格拆分得到干净的名称列表。
  • 路径处理规范:用os.path.join()拼接路径,自动适配Windows的路径分隔符,避免手动拼接的错误。
  • 过滤文件:只处理文件夹中的文件,跳过子文件夹,避免误操作。
  • 索引匹配:用enumerate直接获取文件的索引,对应名称列表的索引,避免count变量的混乱。
  • 数量校验:提前检查名称和文件数量是否一致,防止索引越界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:45:42