读取 gzip 文件并写入文本文件
Read a gzip file and write into text file
如何读取其中包含 JSON 内容的 gzip 文件,然后将该内容写入文本文件。
with open('.../notebooks/decompressed.txt', 'wb') as f_out:
with gzip.open(".../2020-04/statuses.log.2020-04-01-00.gz", 'rb') as f_in:
data = f_in.read()
json.dumps(data)
错误:字节类型的对象不是JSON可序列化的
decompressed.txt 图片(前两行):
enter image description here
如果日志内容已经是json序列化格式,那么只需要按原样写入解压后的数据即可。
import gzip
with gzip.open('.../2020-04/statuses.log.2020-04-01-00.gz', 'rb') as fin:
with open('.../notebooks/decompressed.txt', 'wb') as fout:
data = fin.read()
fout.write(data)
如果文件很大,则导入 shutil 模块并将 read() 和 write() 替换为:
shutil.copyfileobj(fin, fout)
如果要将 JSON 加载到对象中并重新序列化,则:
import gzip
import json
with gzip.open('.../2020-04/statuses.log.2020-04-01-00.gz', 'rb') as fin:
with open('.../notebooks/decompressed.txt', 'w') as fout:
obj = json.load(fin)
json.dump(obj, fout)
如果日志文件是一系列 JSON 结构,则每行一个,然后尝试:
import gzip
with gzip.open('.../2020-04/statuses.log.2020-04-01-00.gz', 'rb') as fin:
for line in fin:
obj = json.loads(line)
# next do something with obj
如果 JSON 太大而无法反序列化,则尝试 ijson 迭代 hugh JSON 结构。
如何读取其中包含 JSON 内容的 gzip 文件,然后将该内容写入文本文件。
with open('.../notebooks/decompressed.txt', 'wb') as f_out:
with gzip.open(".../2020-04/statuses.log.2020-04-01-00.gz", 'rb') as f_in:
data = f_in.read()
json.dumps(data)
错误:字节类型的对象不是JSON可序列化的
decompressed.txt 图片(前两行): enter image description here
如果日志内容已经是json序列化格式,那么只需要按原样写入解压后的数据即可。
import gzip
with gzip.open('.../2020-04/statuses.log.2020-04-01-00.gz', 'rb') as fin:
with open('.../notebooks/decompressed.txt', 'wb') as fout:
data = fin.read()
fout.write(data)
如果文件很大,则导入 shutil 模块并将 read() 和 write() 替换为:
shutil.copyfileobj(fin, fout)
如果要将 JSON 加载到对象中并重新序列化,则:
import gzip
import json
with gzip.open('.../2020-04/statuses.log.2020-04-01-00.gz', 'rb') as fin:
with open('.../notebooks/decompressed.txt', 'w') as fout:
obj = json.load(fin)
json.dump(obj, fout)
如果日志文件是一系列 JSON 结构,则每行一个,然后尝试:
import gzip
with gzip.open('.../2020-04/statuses.log.2020-04-01-00.gz', 'rb') as fin:
for line in fin:
obj = json.loads(line)
# next do something with obj
如果 JSON 太大而无法反序列化,则尝试 ijson 迭代 hugh JSON 结构。