【问题标题】:Read from a gzip file in python从 python 中的 gzip 文件中读取
【发布时间】:2012-10-05 20:02:42
【问题描述】:

我刚刚对 python 上的 gzip 进行了删减。

import gzip
f=gzip.open('Onlyfinnaly.log.gz','rb')
file_content=f.read()
print file_content

我在屏幕上没有输出。作为一个python的初学者,我想知道如果我想读取gzip文件中的文件内容该怎么办。谢谢。

【问题讨论】:

  • 试试print open('Onlyfinnaly.log.gz', 'rb').read().decode('zlib')。如果这不起作用,您能否确认该文件包含某些内容?
  • 是的,我完全确定有一个名为“Onlyfinally.log”的文件。而我想要做的是阅读内容并选择一些来存储另一个文件。但它只打开屏幕上的空白行。
  • 您的代码看起来正确,但请注意您正在将整个文件读入字符串。一种更有效的方法通常是分块读取 gzip 流并一次处理一个。
  • 其中一个有错字。你的 q 有 Onlyfinnaly,你的评论有 Onlyfinally。否则代码是正确的。

标签: python python-2.7 gzip


【解决方案1】:

尝试像这样通过 gzip 库压缩一些数据...

import gzip
content = "Lots of content here"
f = gzip.open('Onlyfinnaly.log.gz', 'wb')
f.write(content)
f.close()

...然后按照发布的方式运行您的代码...

import gzip
f=gzip.open('Onlyfinnaly.log.gz','rb')
file_content=f.read()
print file_content

这个方法对我有用,因为某些原因 gzip 库无法读取某些文件。

【讨论】:

  • 在@Arunava 的答案中使用with 稍微好一些,因为即使在读取时发生错误(或者您忘记了它),文件也会被关闭。作为奖励,它也更短。
【解决方案2】:

python: read lines from compressed text files

使用gzip.GzipFile

import gzip

with gzip.open('input.gz','r') as fin:        
    for line in fin:        
        print('got line', line)

【讨论】:

    【解决方案3】:

    如果你想把内容读成一个字符串,那么open the file in text mode(mode="rt")

    import gzip
    
    with gzip.open("Onlyfinnaly.log.gz", mode="rt") as f:
        file_content = f.read()
        print(file_content)
    

    【讨论】:

      【解决方案4】:

      parquet文件,请使用pandas阅读

      data = read_parquet("file.parquet.gzip")
      data.head()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-12
        • 2015-02-03
        • 1970-01-01
        相关资源
        最近更新 更多