zipfile 和gzip的区别,巧用gzip读取文本文件

最近需要处理linux下的gz问题,发现有两个各相似的包好像都可以处理gz,但是使用上又有一些区别

zipfile

  • 可以处理zip压缩包,将多个文件压缩到一个压缩包中,或者从压缩包中读取其中的各个文件
  • 使用的时候需要先创建zipfile对象,然后使用zip对象的open方法打开文件并进行读写
  • 使用open方法的时候需要传入file_path, 这个path可以使用file_obj.namelist()来获取
for filename in file_obj.namelist():
     with zip_files.open(filename ) as parse_file_handler:
         for line in parse_file_handler.readlines():
              print (line)

gzip

可以处理单个文件,可以直接open压缩文件并从中读取或者写入数据

对于linux下的gz文件,我发现zipfile并没有将它识别为zip文件,这个时候就只能使用gzip了,并且gzip可以直接open方便快捷

gzip读取文本文件

使用gzip的时候默认方式会将file打开为byte格式,就是说读出来的字符串都是bytes格式化的,打印的时候还需要重新转换格式。可以通过下面的方法来直接让gzip读出string格式的数据, 注意这里使用了 ‘rt’encoding 参数

with gzip.open(file_path, 'rt', encoding='utf-8') as input:
     for line in input.readlines():
         print(line)

更进一步,可以使用csv来处理gzip读入的文件

with gzip.open(file_path, 'rt', encoding='utf-8') as zf:
    tsvin = csv.reader(zf, delimiter='\t')
    for line in tsvin:
        yield line

或者

with gzip.open(file_path, 'rt', encoding='utf-8') as zf:
    tsvin = csv.DictReader(zf, delimiter='\t')
    for line in tsvin:
        yield line

这里csv.readercsv.DictReader的区别在于:

  • 使用reader读进来的是一个list嵌套list的数据结构,
  • 使用DictReader读取进来的是一个dict的数据结构,它会使用第一行作为dict的key。

所以如果数据是有headline的话那么就可以用DictReader,如果没有头那么最好用reader

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 初学Linux,记录资料,以备留存,亲手测试了一部分,有的正确,不正确的也改了,没有全部测试,如有误,望大神们不吝...
    世外大帝阅读 5,732评论 1 32
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,173评论 19 139
  • 一、流的概念和作用。 流是一种有顺序的,有起点和终点的字节集合,是对数据传输的总成或抽象。即数据在两设备之间的传输...
    布鲁斯不吐丝阅读 10,408评论 2 95
  • 为什么要整理一下Linux下的打包和压缩工具呢?原因很简单,因为遇到问题了:游戏服务器可执行文件、配置和各种资源文...
    davidpp阅读 10,276评论 0 18
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 13,662评论 2 33

友情链接更多精彩内容