30 MBの文字サイズの大きなファイルを読み込もうとしています。私は大きなファイルを読む方法に関する興味深い記事を見つけました。 Fast Method to Stream Big filesPythonのmmapで、テキストの代わりにバイナリデータを出力する
問題:代わりに、実際の人間が読めるテキストのバイナリデータを印刷出力
コード:
def getRow(filepath):
offsets = get_offsets(filepath)
random.shuffle(offsets)
with gzip.open(filepath, "r+b") as f:
i = 0
mm = mmap.mmap(f.fileno(), 0, access = mmap.ACCESS_READ)
for position in offsets:
mm.seek(position)
record = mm.readline()
x = record.split(",")
yield x
def get_offsets(input_filename):
offsets = []
with open(input_filename, 'r+b') as f:
i = 0
mm = mmap.mmap(f.fileno(), 0, access = mmap.ACCESS_READ)
for record in iter(mm.readline, ''):
loc = mm.tell()
offsets.append(loc)
i += 1
return offsets
for line in getRow("hello.dat.gz"):
print line
出力:出力は、いくつかの奇妙なバイナリデータを生成しています。
['w\xc1\xd9S\xabP8xy\x8f\xd8\xae\xe3\xd8b&\xb6"\xbeZ\xf3P\xdc\x19&H\\@\x8e\x83\x0b\x81?R\xb0\xf2\xb5\xc1\x88rJ\
私は恐ろしい何かをしていますか?
EDIT:
私は問題を発見しました。それはgzip.open
のためです。これを取り除く方法はわかりません。何か案は? GZipFile
の文書を1として
入力いただきありがとうございます。私はそれに応じて私のメソッドを変更しようとしています。 – vkrams