多次运行的Python文件迭代器

多次运行的Python文件迭代器,python,python-2.7,iterator,word2vec,listiterator,Python,Python 2.7,Iterator,Word2vec,Listiterator,我正在使用gensim创建一个word2vec模型,该模型是我在目录中拥有的一个示例文件。我遵循了一个在线教程,它读取目录中的文件并逐行处理。我的示例文件中有9行。但是这段代码给了我9次相同的代码行。有人能解释一下发生了什么事吗 class MySentences(object): def __init__(self, dirname): self.dirname = dirname def __iter__(self): fo

我正在使用gensim创建一个word2vec模型,该模型是我在目录中拥有的一个示例文件。我遵循了一个在线教程,它读取目录中的文件并逐行处理。我的示例文件中有9行。但是这段代码给了我9次相同的代码行。有人能解释一下发生了什么事吗

 class MySentences(object):
     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)):
                 print os.path.join(self.dirname, fname)
                 yield line.split() 

 sentences = MySentences('/fakepath/Folder')
详情: 假设文件名包含3行,如

hi how are you.
I am fine.
I am good.

line.split()
应该只给我一次:
['hi','how','are','you']
。但是这种情况发生了三次,所以我得到了上面的列表三次而不是一次。如果句子总数为5,那么它将返回该行5次。

首先,你应该弄清楚你想做什么。
类mycentenses
将目录作为参数,并创建一个对象
语句
,其中包含一个生成器。因此,
语句
有一个生成器,它包含目录中所有文件中的所有行

例如:

for line in sentences:
    print(line)
您将得到许多以单词为元素的列表(我已经删除了打印路径的print语句)。即:

['hi', 'how', 'are', 'you.']


['I','am','good.]

line.split()中
line
是什么?它是如何初始化的?对于文件中的每一行。它在for loopSo中声明,
'fakepath/filename.txt'
dirname
?对我来说,它看起来像一个文件名,而不是目录名。是的,对不起,它是目录名。我已经编辑了itI,实际上我已经试过你的代码(Python2.7.3.),它可以正常工作。是的,但是它会打印上面的3个列表6次。所以['hi','how','are','you.]['I','am','fine.]['I','am','good.]被打印了六次。你能在没有
打印(os.path.join(self.dirname,fname))
的情况下试一下吗?代码在我的计算机中运行良好。你的打印代码是?你能给我们看一下代码吗?当然,你能在iter的yeild line.split()上面放一个“print line”语句,告诉我们打印的是什么吗?它只打印文件中的行一次还是多次?。谢谢你的帮助,谢谢!如果将打印语句添加到
屈服线.split()
上方,它将打印
路径
加上
文件名
,打印次数与
语句中的列表数量相同。