2016-04-28 36 views
0

私は以下のようにlinecountを安価に見つけるためにcode written by Michaelを持っていますが、実行するとAttributeError File object has no attribute 'raw'というエラーが発生します。以下は、任意のヘルプは非常に_make_gen(f.read)に変更_make_gen(f.raw.read)AttributeError Fileオブジェクトに 'raw'属性がありません。エラー

from itertools import (takewhile,repeat) 

def _make_gen(reader): 
    b = reader(1024 * 1024) 
    while b: 
     yield b 
     b = reader(1024*1024) 

def rawpycount(filename): 
    f = open(filename, 'rb') 
    f_gen = _make_gen(f.raw.read) 
    return sum(buf.count(b'\n') for buf in f_gen) 
+4

「特にこれはPython 3にのみ適用されます。 –

+0

その部分を見逃してしまいましたが、Python 2.7で実行する方法はありますか? – Zack

+1

私はそれがちょうど 'f.read'であるべきだと思います、python 3はユニコードで直接動作し、python 2.7はバイトで直接動作します。 –

答えて

2

を高く評価している参照用のコードです。

デフォルトでユニコードを使用するPython 3.xでは、バイトに変換するためにrawが使用されます。一方、Python 2.xはデフォルトでバイトを使用するため、他のものは必要ありません。

関連する問題