将ISO88591字符粘贴到Python IDLE中会改变它们

2024-04-25 22:38:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图替换/删除文本文档中的一些行。文件采用ISO-8859-1字符编码。你知道吗

当我试图将这一行复制到Python脚本中以替换它时,它将不匹配。如果我缩短行并删除,直到第一个双引号“它将取代它罚款。你知道吗

desc = [x.replace('Random text “^char”:', '') for x in desc]

这不匹配。如果我进入:

desc = [x.replace('Random text :', '') for x in desc]

很配。我已经检查过它不是^符号。 显然pythonidle没有使用与文本文件相同的字符集,而是在将其粘贴到脚本中时更改了符号。那么,如果脚本不能处理相同的字符,如何让脚本查找这一行呢?你知道吗


Tags: 文件textin脚本编码for符号iso
1条回答
网友
1楼 · 发布于 2024-04-25 22:38:32

不幸的是,没有可靠的方法来确定纯文本文档的编码,尽管有些包可以通过分析文档的内容来进行很好的猜测。一个流行的第三方编码检测模块是chardet。或者,您可以手动使用一些流行的编码和试错,看看什么工作。你知道吗

一旦确定了正确的编码,在python3中替换操作本身就很简单了。核心思想是将编码传递给open函数,这样您就可以将Unicode字符串对象写入文件,或者从文件中读取Unicode字符串对象。下面是一个简短的演示。如果终端的编码设置为UTF-8,这将正常工作。我已经在python3.6.0上测试了它,包括bashshell和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

相关问题 更多 >