2016-11-27 35 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”正在运行。第二个功能不运行。 – user697911

+2

第二个函数不应该运行。第二个功能的作用是允许CorpusReader的一个实例进行迭代。所以,如果你在读者中为'我做',它将是可迭代的。 –

回答

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

第二个函数__iter__允许类的对象是可迭代的。这意味着您可以在for循环(或其他迭代方法)中迭代它。要打印所有文件,请执行此操作

for i in reader: 
    print(i)