このスニペットは、すべてのドキュメントをデータベースから取り出し、gzip圧縮されたファイルにダンプします。docs_to_dumpは、ダンプされるすべてのテキストドキュメントを含むdjangoオブジェクトです。
os.chdir(dump_dir)
filename = 'latest-' + court_id + '.xml.gz.part'
with myGzipFile(filename, mode='wb') as z_file:
z_file.write('<?xml version="1.0" encoding="utf-8"?>\n<opinions dumpdate="' + str(date.today()) + '">\n')
for doc in docs_to_dump:
row = etree.Element("opinion",
dateFiled = str(doc.dateFiled),
precedentialStatus = doc.documentType,
local_path = str(doc.local_path),
time_retrieved = str(doc.time_retrieved),
download_URL = doc.download_URL,
caseNumber = doc.citation.caseNumber,
caseNameShort = doc.citation.caseNameShort,
court = doc.court.get_courtUUID_display(),
sha1 = doc.documentSHA1,
source = doc.get_source_display(),
id = str(doc.documentUUID),
)
if doc.documentHTML != '':
row.text = doc.documentHTML
else:
row.text = doc.documentPlainText.translate(null_map)
z_file.write(' ' + etree.tostring(row).encode('utf-8') + '\n')
# Close things off
z_file.write('</opinions>')
残念ながら、それはまた、OSがそれを破壊するほど多くのメモリを消費します。「ファイルのようなオブジェクト」に書き込むことで、圧縮されたファイルがその場で作成され、メモリが比較的少なくなると思いました。代わりに、数百MBを消費し、その後クラッシュします。
私は圧縮の専門家ではありませんが、圧縮ファイル全体がメモリに保存されているように感じます。
私がこれを行うべきより良い方法はありますか?
編集-ファイル全体はここにあります:https ://bitbucket.org/mlissner/search-and-awareness-platform-courtlistener/src/2ca68efd8017/data-dumps/data-dumper.py