我正在尝试替换/删除文本文档中的一些行。该文档采用ISO-8859-1字符编码。
当我尝试将此行复制到我的Python脚本中以替换它时,它不会匹配。如果我缩短线并删除直到第一个双引号"它会取而代之。
即
desc = [x.replace('Random text “^char”:', '') for x in desc]
这不匹配。如果我输入:
desc = [x.replace('Random text :', '') for x in desc]
匹配很好。我已经检查过它也不是^符号。 显然,Python IDLE没有使用与我的文本文件相同的字符集,并且在将其粘贴到脚本中时正在更改符号。那么,如果它不处理相同的字符,如何让我的脚本查找该行?
答案 0 :(得分:1)
不幸的是,确定纯文本文档的编码没有确定的方法,尽管有些软件包可以通过分析文档的内容做出非常好的猜测。用于编码检测的一种流行的第三方模块是chardet。或者您可以手动使用试验和错误与一些流行的编码,看看哪些有效。
一旦确定了正确的编码,替换操作本身在Python 3中很简单。核心思想是将编码传递给open
函数,以便您可以编写Unicode字符串对象该文件,或从该文件中读取Unicode字符串对象。这是一个简短的演示。如果终端的编码设置为UTF-8,这将正常工作。我已经在Python 3.6.0上对它进行了测试,包括Bash shell和idle3.6。
fname = 'test.txt'
encoding = 'cp1252'
data = 'This is some Random text “^char”: for testing\n'
print(data)
# Save the text to file
with open(fname, 'w', encoding=encoding) as f:
f.write(data)
# Read it back in
with open(fname, 'r', encoding=encoding) as f:
text = f.read()
print(text, text == data)
# Perform the replacement
target = 'Random text “^char”:'
out = text.replace(target, 'XXX')
print(out)
<强>输出强>
This is some Random text “^char”: for testing
This is some Random text “^char”: for testing
True
This is some XXX for testing