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

Python修改文件时os.replace报错及Python3解码错误求助

问题解决方案

第一个报错:os.replace 不存在问题

  • 报错原因:os.replace() 是Python 3.3版本才新增的API,你最初使用的Python 2.7不包含该方法,因此触发属性不存在报错。
  • 兼容方案:
    兼容Python2/3环境可使用os.rename()替代,跨磁盘分区移动场景下也可以使用shutil.move(),写法参考:
    # 普通场景替代os.replace
    import os
    os.rename('temp.txt', 'Soothing.txt')
    # 跨磁盘分区场景用下面的写法
    # import shutil
    # shutil.move('temp.txt', 'Soothing.txt')
    
    注:Linux环境下os.rename覆盖已存在目标文件不会报错,符合你的使用需求。

第二个报错:UTF-8解码错误问题

  • 报错原因:Python3默认以UTF-8编码读取文本文件,你的Soothing.txt文件不是UTF-8编码,内部存在不符合UTF-8规则的字节,因此解码失败。
  • 解决方案:打开文件时显式指定文件的实际编码;如果不清楚文件编码,可指定errors参数处理解码异常,写法参考:
    # 已知文件编码的场景,比如GBK编码就填gbk,Latin-1编码就填latin-1
    with open("Soothing.txt", "r", encoding="gbk") as input:
    # 未知编码的场景,忽略解码错误不影响处理逻辑
    with open("Soothing.txt", "r", encoding="utf-8", errors="ignore") as input:
    

完整修复后的代码

import os

# 打开文件时指定编码和异常处理规则,避免解码报错
with open("/home/johnny/Documents/Python/Soothing.txt", "r", encoding="utf-8", errors="ignore") as input:
    with open("/home/johnny/Documents/Python/temp.txt", "w", encoding="utf-8") as output:
        # 遍历文件所有行
        for line in input:
            # 若行以指定子串开头则不写入临时文件
            if not line.strip("\n").startswith('stuff i dont like'):
                output.write(line)

# 用os.rename替代os.replace兼容低版本Python
os.rename('/home/johnny/Documents/Python/temp.txt', '/home/johnny/Documents/Python/Soothing.txt')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:06:02