我正在尝试对文件进行一些替换操作:
'\t' --> '◊'
'⁞' --> '\t'
这个问题推荐以下步骤:
import fileinput
with fileinput.FileInput(filename, inplace=True, backup='.bak') as file:
for line in file:
line = line.replace('\t','◊')
print(line.replace('⁞','\t'), end='')
我无法在那里发表评论,但当我运行这段代码时,会出现一个错误提示:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 10: character maps to <undefined>
我之前遇到过类似的错误,通过添加
encoding='utf-8'
来解决。
问题在于 fileinput.FileInput()
没有提供编码参数。
问题: 如何解决这个错误?
如果以下方法的速度与 上述解决方案 相当且能够进行原地替换,那么我将非常满意它。 我还尝试了以下方法:
replacements = {'\t':'◊', '⁞':'\t'}
with open(filename, encoding='utf-8') as inFile:
contents = inFile.read()
with open(filename, mode='w', encoding='utf-8') as outFile:
for i in replacements.keys():
contents = contents.replace(i, replacements[i])
outFile.write(contents)
这段代码的执行速度相对较快,但在内存使用方面非常贪婪。
对于UNIX用户,我需要一个能够执行以下操作的工具:
sed -i 's/\t/◊/g' 'file.csv'
sed -i 's/⁞/\t/g' 'file.csv'
这个结果变得相当缓慢。