Streamieren des Lesens einer sehr großen komprimierten JSON -Datei in PythonPython

Python-Programme
Anonymous
 Streamieren des Lesens einer sehr großen komprimierten JSON -Datei in Python

Post by Anonymous »

Ich habe eine sehr große (zu groß, um im RAM zu halten) .json.zstd Datei, die ich iterativ mit einem Generator von Texts Data_Chunks erstellt habe.

Code: Select all

[{"text": "very very"}," very very", " very very very", {"text": " very very long"}]
< /code>
hier in diesem Spielzeugbeispiel kann es offensichtlich in RAM gehalten.import zstandard as zstd

# real code used to write the very large file
def write_to_file(output_path, data_chunks, level=22):
cctx = zstd.ZstdCompressor(level=level)

with open(output_path, 'wb') as f_out:
with cctx.stream_writer(f_out) as compressor:
for idx, chunk in enumerate(data_chunks):
if isinstance(chunk, str):
pass
elif isinstance(chunk, dict):
chunk = chunk["text"]
else:
raise ValueError(f"Unrecognized chunk {type(chunk)}")
if idx == 0:
chunk = '{"text": "' + chunk
chunk = chunk.encode("utf-8")
compressor.write(chunk)
compressor.write('"}'.encode("utf-8"))

# toy example
write_to_file("test.json.zstd", [{"text": "very very"}," very very", " very very very", {"text": " very very long"}], level=22)
< /code>
Diese komprimierte Datei enthält jetzt nur eine JSON-Datei.import io
def read_zstd_lines(input_path):
dctx = zstd.ZstdDecompressor()
with open(input_path, 'rb') as compressed:
with dctx.stream_reader(compressed) as decompressor:
text_stream = io.TextIOWrapper(decompressor, encoding='utf-8')
for line in text_stream:
if line.strip():
yield json.loads(line)
next(read_zstd_lines("test.json.zstd"))
Ich suche nach einer Lösung, die IJSON ähnelt, die sie in RAM iterativ durch (potenziell Größenanpassungsabwände) (oder nur in den Töpfen nicht größer als eine feste Größe) lesen würde, aber das würde auf der komprimierten Datei wie das obige Beispiel funktionieren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post