【问题标题】:How to iterate through and unzip ".gz" files in python?如何在python中遍历和解压缩“.gz”文件?
【发布时间】:2019-02-16 04:41:33
【问题描述】:

我有几个子文件夹,每个子文件夹都包含 twitter 压缩文件。我希望 python 遍历这些子文件夹并将它们转换为常规 JSON 文件。 我有 300 多个子文件夹,每个子文件夹包含大约 1000 个或更多这些压缩文件。 这些文件的一个示例被命名为: 00_activities.json.gz%3FAWSAccessKeyId=AKIAJADH5KHBJMUZOPEA&Expires=1404665927&Signature=%2BdCn%252Ffn%2BFfRQhknWWcH%2BtnwlSfk%3D"

提前致谢

我已经尝试了下面的代码,只是想看看我是否可以提取其中一个文件,但没有一个有效。

import zipfile
zip_ref = zipfile.ZipFile('E:/echoverse/Subdivided Tweets/Subdivided Tweets/Tweets-0', 'r')
zip_ref.extractall('E:/echoverse/Subdivided Tweets/Subdivided Tweets/Tweets-0/00_activities.json.gz%3FAWSAccessKeyId=AKIAJADH5KHBJMUZOPEA&Expires=1404665927&Signature=%2BdCn%252Ffn%2BFfRQhknWWcH%2BtnwlSfk%3D')
zip_ref.close()

我也试过了:

import tarfile
tar = tarfile.open('E:/echoverse/Subdivided Tweets/Subdivided Tweets/Tweets-0/00_activities.json.gz%3FAWSAccessKeyId=AKIAJADH5KHBJMUZOPEA&Expires=1404665927&Signature=%2BdCn%252Ffn%2BFfRQhknWWcH%2BtnwlSfk%3D')
tar.extractall()
tar.close

这是我的第三次尝试(但没有运气):

import gzip
import json
with gzip.open('E:/echoverse/Subdivided Tweets/Subdivided Tweets/Tweets-0/00_activities.json.gz%3FAWSAccessKeyId=AKIAJADH5KHBJMUZOPEA&Expires=1404665927&Signature=%2BdCn%252Ffn%2BFfRQhknWWcH%2BtnwlSfk%3D'
, 'rb') as f:
    d = json.loads(f.read().decode("utf-8"))

stackover 流还有另一个非常相似的威胁,但我的问题不同,因为我的压缩文件最初是 JSON,当我使用最后一种方法时,我得到了这个错误: 发生异常:json.decoder.JSONDecodeError 期望值:第 1 行第 1 列(char 0)

【问题讨论】:

标签: python json gzip traversal


【解决方案1】:

回答问题的简单脚本:它遍历、检查文件 (fname) 是否为 gzip(通过幻数,因为我很愤世嫉俗)并解压缩。

import json
import gzip
import binascii
import os


def is_gz_file(filepath):
    with open(filepath, 'rb') as test_f:
        return binascii.hexlify(test_f.read(2)) == b'1f8b'


rootDir = '.'
for dirName, subdirList, fileList in os.walk(rootDir):
    for fname in fileList:
        filepath = os.path.join(dirName,fname)
        if is_gz_file(filepath):
            f = gzip.open(filepath, 'rb')
            json_content = json.loads(f.read())
            print(json_content)

经过测试,它可以工作。

【讨论】:

  • 非常感谢。它几乎完全回答了我的问题。我的最后一个问题是如何以 JSON 格式存储解压缩的文件。
  • 实际上,它给出了以下错误:发生异常:json.decoder.JSONDecodeError Extra data: line 2 column 1 (char 1464)
  • 更新了将文件内容存储为json对象的代码。
猜你喜欢
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
相关资源
最近更新 更多