为什么  出现在我的数据中?
Why does  appear in my data?
我从这里下载了文件 'pi_million_digits.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....”
是什么导致了这些奇怪的符号?我正在剥离线条,所以我希望删除这些符号。
您似乎正在使用 ISO-8859-1 编码打开一个 UTF-8 编码 Byte Order Mark 的文件(可能是因为这是您 OS 的默认编码)。
如果以字节形式打开它并阅读第一行,您应该会看到如下内容:
>>> next(open('pi_million_digits.txt', 'rb'))
b'\xef\xbb\xbf3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679\n'
… 其中 \xef\xbb\xbf
是 BOM 的 UTF-8 编码。以 ISO-8859-1 打开,看起来像你得到的:
>>> next(open('pi_million_digits.txt', encoding='iso-8859-1'))
'3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679\n'
…以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.
我从这里下载了文件 'pi_million_digits.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....”
是什么导致了这些奇怪的符号?我正在剥离线条,所以我希望删除这些符号。
您似乎正在使用 ISO-8859-1 编码打开一个 UTF-8 编码 Byte Order Mark 的文件(可能是因为这是您 OS 的默认编码)。
如果以字节形式打开它并阅读第一行,您应该会看到如下内容:
>>> next(open('pi_million_digits.txt', 'rb'))
b'\xef\xbb\xbf3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679\n'
… 其中 \xef\xbb\xbf
是 BOM 的 UTF-8 编码。以 ISO-8859-1 打开,看起来像你得到的:
>>> next(open('pi_million_digits.txt', encoding='iso-8859-1'))
'3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679\n'
…以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.