Python 文件迭代器 运行 多次
Python File iterator running multiple times
我正在使用 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']
只有一次。但是这种情况发生了 3 次,所以我得到上面的列表三次而不是一次。如果句子总数是5,那么它returns行5次。
首先你应该弄清楚你想要做什么。 class MySentences
将一个目录作为参数并创建一个对象 sentences
,其中包含一个生成器。所以 sentences
有一个生成器包含目录中所有文件中的所有行。
例如:
for line in sentences:
print(line)
你会得到很多以单词为元素的列表(我已经删除了打印路径的打印语句)。即:
['hi', 'how', 'are', 'you.']
['I', 'am', 'fine.']
['I', 'am', 'good.']
我正在使用 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']
只有一次。但是这种情况发生了 3 次,所以我得到上面的列表三次而不是一次。如果句子总数是5,那么它returns行5次。
首先你应该弄清楚你想要做什么。 class MySentences
将一个目录作为参数并创建一个对象 sentences
,其中包含一个生成器。所以 sentences
有一个生成器包含目录中所有文件中的所有行。
例如:
for line in sentences:
print(line)
你会得到很多以单词为元素的列表(我已经删除了打印路径的打印语句)。即:
['hi', 'how', 'are', 'you.']
['I', 'am', 'fine.']
['I', 'am', 'good.']