【发布时间】:2021-06-22 07:50:43
【问题描述】:
#below是Python 2.6.6版本删除搞笑字符“½”的步骤,效果很好。
#-*- coding: utf-8 -*-
import os,glob
funny=glob.glob('C:\A\Text\*') #This folder has 10 files, so i use '*' for a loop
for h in funny:
with open(r'%s' %h, 'r') as infile,open(r'%sN' %h, 'w') as outfile:
data = infile.read()
data = data.replace ("13½","13")
data = data.decode("ascii", "ignore")
outfile.write(data)
infile.close()
outfile.close()
os.remove(h)
os.rename(r'%sN' %h,r'%s' %h)
但是现在我们升级到 3.9.2 版本,这不能工作,它显示如下错误消息:
Traceback(最近一次调用最后一次): 文件“C:/A/test.py”,第 10 行,在 数据 = infile.read() 解码中的文件“C:\Program Files\Python39\lib\encodings\cp1252.py”,第 23 行 返回 codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError:“charmap”编解码器无法解码位置 10871 中的字节 0x9d:字符映射到
我搜索了很多,新版本中没有替换功能用那个“½”,有什么想法吗?
【问题讨论】:
-
仅供参考,
r'%s' %h只是写h是一种令人困惑的方式。 -
看起来好像是
infile.read()导致了错误。 python 中的open采用可选的encoding关键字。尝试设置encoding="utf-8"看看会发生什么。 -
@Kevin \x9d 在 UTF-8 中也没有明确定义。
标签: python str-replace