为什么在我的数据中出现?

2024-06-01 20:32:27 发布

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

我下载了“百万富翁”文件_数字.txt'从这里开始:

https://github.com/ehmatthes/pcc/blob/master/chapter_10/pi_million_digits.txt

然后我用这个代码打开并阅读它:

filename = 'pi_million_digits.txt'

with open(filename) as file_object:
    lines = file_object.readlines()

pi_string = ''
for line in lines:
    pi_string += line.strip()

print(pi_string[:52] + "...")
print(len(pi_string))

然而,所产生的输出是正确的,除了前面有同样奇怪的符号:“è?3.141…”

是什么导致了这些奇怪的符号?我正在剥线,所以我希望这样的符号会被删除。在


Tags: 文件httpstxtstringobjectlinepi符号
1条回答
网友
1楼 · 发布于 2024-06-01 20:32:27

看起来您正在打开一个使用ISO-8859-1编码的UTF-8编码的文件Byte Order Mark(大概是因为这是操作系统上的默认编码)。在

如果您以字节形式打开它并读取第一行,您应该会看到如下所示:

>>> next(open('pi_million_digits.txt', 'rb'))
b'\xef\xbb\xbf3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679\n'

…其中\xef\xbb\xbf是BOM的UTF-8编码。打开为ISO-8859-1,它看起来像是:

^{pr2}$

…并将其作为UTF-8打开,将显示实际的BOM字符U+FEFF:

>>> next(open('pi_million_digits.txt', encoding='utf-8'))
'\ufeff3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679\n'

要去除标记,请使用特殊编码utf-8-sig

>>> next(open('pi_million_digits.txt', encoding='utf-8-sig'))
'3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679\n'

上面的例子中使用next()只是为了演示。在您的代码中,您只需要将encoding参数添加到open()行中,例如

with open(filename, encoding='utf-8-sig') as file_object:
    # ... etc.

相关问题 更多 >