我有几个子文件夹,每个子文件夹都包含压缩的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"))
堆栈溢出流还有另一个非常相似的威胁,但是我的问题不同,因为我的压缩文件最初是JSON,而当我使用最后一种方法时,会出现此错误: 发生异常:json.decoder.JSONDecodeError 期望值:第1行第1列(字符0)
答案 0 :(得分:0)
回答以下问题的简单脚本:它遍历,检查文件(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)
经过测试,并且可以正常运行。