如何优雅地打开 ASCII 文本
How to open a ASCII text graceful
当我用 Python 打开文件时很混乱。顺便说一句,我正在使用 python3.4.
首先它是一个日志文件(一个随时附加的巨大文件),所以iconv
不可能。
Info1 file
是 ASCII 文本。
demo git:master ❯ file 1.log
1.log: ASCII text, with very long lines
Info2 ipython
使用默认编码 'UTF-8':
打开它
In [1]: f = open('1.log')
In [2]: f.encoding
Out[2]: 'UTF-8'
然后
第一次当我open('1.log', encoding='utf-8', mode='r')
ERROR: 'utf-8' codec can't decode byte 0xb1 in position 6435: invalid start byte
第二个当我open('1.log', encoding='ascii', mode='r')
ERROR: 'ascii' codec can't decode byte 0xe9 in position 6633: ordinal
not in range(128)
如何在读取每一行的同时优雅地处理这个文件?
这是我在 github demo
上的演示
可能是 Windows CP 1252 或 Latin 1。尝试用以下方式打开它:
open('1.log', encoding='latin-1', 'rU')
看起来它不是 ascii 文件。编码测试通常是不准确的。尝试 chardet 它将为您检测编码。
然后
import chardet
filepointer = open(self.filename)
charset_detected = chardet.detect(filepointer.read())
请记住,这可能需要非常非常长的时间。在您尝试之前,我建议您先手动循环浏览明显的编码。
试试 UTF16 和 UTF32。然后尝试 Windows 编码。 Here is a list of several encodings.
我尝试了几种不同的编码组合,只需将脚本中的编码更改为 latin1
,我就能够完全访问日志文件,因此 open('1.log', encoding='utf-8', mode='r')
行变为open('1.log', encoding='latin1', mode='r')
.
当我用 Python 打开文件时很混乱。顺便说一句,我正在使用 python3.4.
首先它是一个日志文件(一个随时附加的巨大文件),所以iconv
不可能。
Info1 file
是 ASCII 文本。
demo git:master ❯ file 1.log
1.log: ASCII text, with very long lines
Info2 ipython
使用默认编码 'UTF-8':
In [1]: f = open('1.log')
In [2]: f.encoding
Out[2]: 'UTF-8'
然后
第一次当我open('1.log', encoding='utf-8', mode='r')
ERROR: 'utf-8' codec can't decode byte 0xb1 in position 6435: invalid start byte
第二个当我open('1.log', encoding='ascii', mode='r')
ERROR: 'ascii' codec can't decode byte 0xe9 in position 6633: ordinal not in range(128)
如何在读取每一行的同时优雅地处理这个文件?
这是我在 github demo
上的演示可能是 Windows CP 1252 或 Latin 1。尝试用以下方式打开它:
open('1.log', encoding='latin-1', 'rU')
看起来它不是 ascii 文件。编码测试通常是不准确的。尝试 chardet 它将为您检测编码。
然后
import chardet
filepointer = open(self.filename)
charset_detected = chardet.detect(filepointer.read())
请记住,这可能需要非常非常长的时间。在您尝试之前,我建议您先手动循环浏览明显的编码。
试试 UTF16 和 UTF32。然后尝试 Windows 编码。 Here is a list of several encodings.
我尝试了几种不同的编码组合,只需将脚本中的编码更改为 latin1
,我就能够完全访问日志文件,因此 open('1.log', encoding='utf-8', mode='r')
行变为open('1.log', encoding='latin1', mode='r')
.