2016-11-27 10 views
1

iterは実行されません。ディレクトリ/ tmpにある各ファイルのすべての単語を出力したいだけです。あなたが必要なものディレクトリ内のファイルを一覧表示する方法

class CorpusReader: 
    def __init__(self, dirname): 
     self.dirname = dirname; 

    def __iter__(self): 
     for fname in os.listdir(self.dirname): 
      for line in open(os.path.join(self.dirname,fname)): 
       yield line.split() 

reader = CorpusReader("/tmp") 
+0

「__iter__」は実行されません。 –

+0

"init"だけが実行されています。 2番目の関数は実行されません。 – user697911

+2

2番目の関数は実行してはいけません。 2番目の機能は、CorpusReaderのインスタンスを反復可能にすることです。したがって、あなたが '私は読者のために:'を実行すれば、iterableになります。 –

答えて

3

readerをループしている:

for line in reader: 
    print line 

更新

ないすべてのファイルが読み取り可能であることに注意してください、あなたはこのケースを防ぐために必要があります。

def __iter__(self): 
     for fname in os.listdir(self.dirname): 
      try: 
       for line in open(os.path.join(self.dirname,fname)): 
        yield line.split() 
      except IOError: 
       pass # or handle this error, most likely due to file not readable 
1

第2の関数__iter__は、クラスのオブジェクトを反復可能にする必要があります。つまり、forループ(またはその他の反復可能なメソッド)でiterateを繰り返すことができます。すべてのファイルを印刷するには

for i in reader: 
    print(i) 
関連する問題