在python中使用特定文本编码打开(可能是gzip)文件的通用方法
发布时间:2020-12-20 13:30:11 所属栏目:Python 来源:网络整理
导读:我正在编写一段代码,打开一个(可能是gzip)文本文件,可以在 Python 2和 Python 3中运行. 如果我只有普通的文本文件(未压缩),我可以这样做: import iofor line in io.open(file_name,encoding='some_encoding'): pass 如果我不关心解码(在python 2/3中使用字
我正在编写一段代码,打开一个(可能是gzip)文本文件,可以在
Python 2和
Python 3中运行.
如果我只有普通的文本文件(未压缩),我可以这样做: import io for line in io.open(file_name,encoding='some_encoding'): pass 如果我不关心解码(在python 2/3中使用字符串/字节) if file_name.endswith('.gz'): file_obj = gzip.open(file_name) else: file_obj = open(file_name) for line in file_obj: pass 我怎样才能顺利地处理这两种情况呢?换句话说,如何将解码与gzip.open()平滑地集成? 解决方法
我对此进行了简要测试,似乎做了正确的事情.你可以提供一个文件obj到gzip.GzipFile和io.open
import io import gzip f_obj = open('file.gz','r') io_obj = io.open(f_obj.fileno(),encoding='UTF-8') gzip_obj = gzip.GzipFile(fileobj=io_obj,mode='r') gzip_obj.read() 这给了我一个UnicodeDecodeError,因为我正在阅读的文件实际上不是UTF-8,所以看起来它做的是正确的. 出于某种原因,如果我使用io.open直接打开file.gz,gzip说该文件不是压缩文件. UPDATE 测试文件 ? ? u y 以下代码使用定义的编解码器解码压缩文件 import codecs import gzip gz_fh = gzip.open('file.gz') ascii = codecs.getreader('ASCII') utf8 = codecs.getreader('UTF-8') ascii_fh = ascii(gz_fh) utf8_fh = utf8(gz_fh) ascii_fh.readlines() -> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128) utf8_fh.readlines() -> [u'xf6n',u'xe4n',u'un',u'y'] codecs.StreamReader接受一个流,因此您应该能够将压缩或未压缩的文件传递给它. http://docs.python.org/library/codecs.html#codecs (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |