Python修改文件时os.replace报错及Python3解码错误求助
问题解决方案
第一个报错:os.replace 不存在问题
- 报错原因:
os.replace()是Python 3.3版本才新增的API,你最初使用的Python 2.7不包含该方法,因此触发属性不存在报错。 - 兼容方案:
兼容Python2/3环境可使用os.rename()替代,跨磁盘分区移动场景下也可以使用shutil.move(),写法参考:
注:Linux环境下# 普通场景替代os.replace import os os.rename('temp.txt', 'Soothing.txt') # 跨磁盘分区场景用下面的写法 # import shutil # shutil.move('temp.txt', 'Soothing.txt')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
相关产品推荐
相关产品推荐

