Spaces:
Running
Running
File size: 1,829 Bytes
b25fb44 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# =========== Copyright 2023 @ CAMEL-AI.org. All Rights Reserved. ===========
# Licensed under the Apache License, Version 2.0 (the “License”);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an “AS IS” BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# =========== Copyright 2023 @ CAMEL-AI.org. All Rights Reserved. ===========
import json
import os
import zipfile
class AutoZip:
def __init__(self, zip_path: str, ext: str = ".json"):
self.zip_path = zip_path
self.zip = zipfile.ZipFile(zip_path, "r")
self.fl = [f for f in self.zip.filelist if f.filename.endswith(ext)]
def __next__(self):
if self.index >= len(self.fl):
raise StopIteration
else:
finfo = self.fl[self.index]
with self.zip.open(finfo) as f:
raw_json = json.loads(f.read().decode("utf-8"))
self.index += 1
return raw_json
def __len__(self):
return len(self.fl)
def __iter__(self):
self.index = 0
return self
def as_dict(self, include_zip_name: bool = False):
d = dict()
for finfo in self.fl:
with self.zip.open(finfo) as f:
raw_text = f.read().decode("utf-8")
if include_zip_name:
key = os.path.split(self.zip_path)[1] + "/" + finfo.filename
else:
key = finfo.filename
d[key] = raw_text
return d
|