2017-02-23 101 views
-1

Я использую gensim для создания модели word2vec файла образца, который у меня есть в каталоге. Я последовал за учебником онлайн, который читает файлы в каталоге и обрабатывает его по строкам. Мой образец файла имеет 9 строк. Но этот код дает мои те же строки 9 раз. Может кто-нибудь объяснить, что происходит.Имитатор файлов Python, выполняющийся несколько раз

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, оно возвращает строку 5 раз.

+0

Что такое '' line' в line.split() '? Как он инициализируется? – DyZ

+0

Для каждой строки в файле. он объявлен в цикле for –

+0

Итак, '' fakepath/filename.txt'' является 'dirname'? Это похоже на имя файла, а не на имя каталога. – DyZ

ответ

0

Сначала вы должны выяснить, что вы пытаетесь сделать. class MySentences берет каталог как параметр и создает объект sentences с генератором в нем. Таким образом, у sentences есть генератор, содержащий все строки во всех файлах в каталоге.

Например:

for line in sentences: 
    print(line) 

вы получите много списков со словами, как элемент (я снял оператор печати, который печатает путь). Что:

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

['I', 'am', 'fine.']

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

+0

Да, но он печатает вышеуказанные 3 списка 6 раз. Итак, ['hi', 'how', 'are', 'you.'] ['I', 'am', 'fine.'] ['I', 'am', 'good.'] печатается шесть раз. –

+0

Не могли бы вы попробовать его без 'print (os.path.join (self.dirname, fname))', код отлично работает на моем компьютере. – EvanL00

+0

И ваш код печати? Не могли бы вы показать нам код? – EvanL00