文字列を含むリストからxバイトのデータを読み取る方法を見つける必要があります。リストの各項目は〜36MBです。リストの各項目を実行する必要がありますが、一度にその項目の約1KBを取得するだけです。Pythonで文字列のリストの一部だけを読む方法
基本的に、それは次のようになります。
for item in list:
#grab part of item
#do something with that part
#Move onto next part, until you've gone through the whole item
私の現在のコード(作品のようなものではなく、遅くて非効率的であると思われる)などである。
for character in bucket:
print character
packet = "".join(character)
if(len(packet.encode("utf8")) >= packetSizeBytes):
print "Bytes: " + str(len(packet.encode("utf8")))
return packet
場合、私は思ったんだけど文字列の場合はf.read(bufSize)
のようなものが存在します。私ははるかに小さい(より管理しやすいチャンク)に非常に大きなファイル(数GB)からデータを読んでいる
:それは、関連するのですが、より多くのコンテキストのために、これは私がやっているであれば
わかりません。私はf.read(chunkSize)
を使用してファイルをチャンクし、それらをbuckets
として保存します。しかし、それらのバケットでさえも、最終的にデータを処理する必要があるためにはまだ大きすぎますので、一度にバケットの一部しか取得しません。
元々、私はバケツの全体をバイパスして、私の目的のために十分小さかったチャンクにファイルをチャンクしました。しかし、これにより、何千もの時間をかけてファイルをチャンクしなければならなくなりました。バケツをキューに入れてバケツで何かをしている間に、他の人から読むことができるようにすることが今の希望です。このような音が混乱する場合は、私に知らせてください。私は明確にしようとします。あなたはstr
年代(またはbyte
「パイソン3における複数可)を使用している場合
おかげ
チャンクを保存する理由... f.read(chunkSize)のようにデータの各ビットを処理するだけでなく、完了したらそれを放棄するのはなぜですか? –
これは私が元々やっていたものですが、はるかに小さいチャンクでもあります。データを扱う際には、データの一部を「プリロード」するよりも時間がかかるように見えて、別のデータを読みながらデータを処理できるようになりました。基本的に私はデータでバッファをダブルバッファリングしようとしています – Swoldier
@Swoldierタイミングとプロファイリングによる遅さの印象を確認しましたか? :) –