1

HTTP経由で複数行のデータを受け取り、それを1つの文字列にまとめました。特定のキーワードを含む行のみをフィルタリングしてファイルに書き込む必要があります。

過剰なメモリを消費せずにこれらの個々の行を処理するにはどうすればよいですか?つまり、入力文字列を改行で分割してからリストを処理することはありませんか?

Jython固有のソリューションも歓迎します。

4

4 に答える 4

1

のイテレータバージョンはないため、次のモジュールstr.splitを使用してエミュレートすることをお勧めします。re

for line in re.finditer('.*?\n', data):
   # do stuff

splitただし、これにより、通常の方法とは異なり、末尾の改行がそのまま残ることに注意してください。

于 2012-03-30T09:25:00.397 に答える
0

コンパイルされた正規表現を使用してみることができますpythonre

于 2012-03-30T09:18:04.693 に答える
0

StringIOモジュールを使用して、ファイルのようなオブジェクトとして文字列にアクセスします。次に、ファイルの場合と同じように、行を繰り返すことができます。

于 2012-03-30T09:52:35.173 に答える
0

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の同じ文字列によってサポートされているようです。

私は速度をテストしませんでした。

于 2012-04-03T08:27:21.433 に答える