HTTP経由で複数行のデータを受け取り、それを1つの文字列にまとめました。特定のキーワードを含む行のみをフィルタリングしてファイルに書き込む必要があります。
過剰なメモリを消費せずにこれらの個々の行を処理するにはどうすればよいですか?つまり、入力文字列を改行で分割してからリストを処理することはありませんか?
Jython固有のソリューションも歓迎します。
HTTP経由で複数行のデータを受け取り、それを1つの文字列にまとめました。特定のキーワードを含む行のみをフィルタリングしてファイルに書き込む必要があります。
過剰なメモリを消費せずにこれらの個々の行を処理するにはどうすればよいですか?つまり、入力文字列を改行で分割してからリストを処理することはありませんか?
Jython固有のソリューションも歓迎します。
のイテレータバージョンはないため、次のモジュールstr.split
を使用してエミュレートすることをお勧めします。re
for line in re.finditer('.*?\n', data):
# do stuff
split
ただし、これにより、通常の方法とは異なり、末尾の改行がそのまま残ることに注意してください。
コンパイルされた正規表現を使用してみることができますpythonre
StringIOモジュールを使用して、ファイルのようなオブジェクトとして文字列にアクセスします。次に、ファイルの場合と同じように、行を繰り返すことができます。
Jythonでdata.split('\ n')、re.finditer('。*?\ n'、data)、StringIO.readline()を使用する場合のメモリ要件を実際にテストしました。split()が使用メモリ(PS Old Gen)を増加させなかったことに驚いた。StringIOが2番目と3番目に来た。
Jython 2.5.1+:
split() +0 x data
StringIO +2 x data
re +4 x data
Jython 2.2.1:
split() +0 x data
re +2 x data
StringIO +7 x data
StringIOは、.write()呼び出しの後に追加のメモリを使用しませんでした。つまり、Jythonの同じ文字列によってサポートされているようです。
私は速度をテストしませんでした。