サブタイトルio.TextIOWrapper
の後にthis postとしていますが、私の目的は異なります。この(:motivation NB):でオフに開始`io.TextIOWrapper`をサブクラス化してファイルをサブクラス化しますが、そのコンストラクタにはどのような署名がありますか?
class MyTextIOFile(io.TextIOWrapper):
def read(self, *args):
cont = super().read(*args)
return cont.replace("\x00", "")
私は
In [81]: f = MyTextIOFile("file.csv")
を使用して私のコンストラクタを使用してファイルを開くしようとしているが、これが与える:、
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-90-343e18b2e32f> in <module>()
----> 1 f = MyTextIOFile("file.csv")
AttributeError: 'str' object has no attribute 'readable'
そして実際にio.TextIOWrapper
コンストラクタがファイルオブジェクトを渡すと予想されます。試行錯誤を経て、私はこのファイルオブジェクトをバイナリモードで開く必要があることを発見しました。しかし、私はドキュメントをどこにも見つけることができず、文書化されていない動作の上に構築するような気がしません(実際には、オブジェクトをcsv.reader
に渡そうとすると、 Python 3でファイルオブジェクトをサブクラス化する正しい方法とサポートされている方法は何ですか?
私はPython 3.5.0を使用しています。
代わりに構図を使用することを検討してください。あなたのクラスに 'open'を使ってファイルを開き、代わりに返されたオブジェクトへの参照を保存させます。 – chepner
@chepner io.IOBase'ファミリーから継承しないという意味ですか?最終的に私はこれを 'csv.csvreader'に渡したいので、私の目的はすべてのNULを取り除いたファイルを読むことです([この質問](http://stackoverflow.com/a/4169762/974555)参照))。 – gerrit
右; 'csv.csvreader'は、イテレータプロトコルを実装している限り(つまり、次の行を取得するために呼び出すことができる' next'メソッドを持っていれば)、受信するタイプを気にしません。 – chepner