Итерации через слова файла в Python

Мне нужно перебирать слова большого файла, который состоит из одной длинной длинной строки. Я знаю методы, которые повторяются через файл по строкам, однако они не применимы в моем случае из-за его структуры с одной строкой.

Любые альтернативы?

  • Доступ к элементам JSON
  • Как установить разрешения (атрибуты) в файле в ZIP-файле с помощью zipfile-модуля Python?
  • Преобразование строки в список слов?
  • Веб-страница перенаправляется на главную страницу с помощью CGI Python
  • Привести текущую программу Python к фону
  • Celery Beat: ограничение на единицу задания одновременно
  • C, Python - различное поведение операции modulo (%)
  • PyQt - несколько табличных виджетов и табличек
  • 8 Solutions collect form web for “Итерации через слова файла в Python”

    Это зависит от вашего определения слова . Но попробуйте следующее:

     f = file("your-filename-here").read() for word in f.split(): # do something with word print word 

    Это будет использовать пробельные символы в качестве границ слов.

    Конечно, не забудьте правильно открыть и закрыть файл, это просто быстрый пример.

    Длинная длинная линия? Я предполагаю, что линия слишком велика, чтобы разумно поместиться в памяти, поэтому вам нужна какая-то буферизация.

    Прежде всего, это плохой формат; если у вас есть какой-либо контроль над файлом, сделайте это по одному слову в строке.

    Если нет, используйте что-то вроде:

     line = '' while True: word, space, line = line.partition(' ') if space: # A word was found yield word else: # A word was not found; read a chunk of data from file next_chunk = input_file.read(1000) if next_chunk: # Add the chunk to our line line = word + next_chunk else: # No more data; yield the last word and return yield word.rstrip('\n') return 

    Вы действительно должны использовать генератор

     def word_gen(file): for line in file: for word in line.split(): yield word with open('somefile') as f: word_gen(f) 

    Есть более эффективные способы сделать это, но синтаксически это может быть кратчайшим:

      words = open('myfile').read().split() 

    Если память вызывает беспокойство, вы не захотите это делать, потому что она будет загружать всю вещь в память, а не итерировать ее.

    Прочитайте в строке как обычно, затем разделите ее на пробел, чтобы разбить ее на слова?

    Что-то вроде:

     word_list = loaded_string.split() 

    После прочтения строки вы можете сделать:

     l = len(pattern) i = 0 while True: i = str.find(pattern, i) if i == -1: break print str[i:i+l] # or do whatever i += l 

    Алекс.

    То, что предложил Дональд Майнер, выглядит неплохо. Простой и короткий. Я использовал ниже в коде, который я написал некоторое время назад:

     l = [] f = open("filename.txt", "rU") for line in f: for word in line.split() l.append(word) 

    более длинную версию того, что предложил Дональд Майнер.

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

    Вот мой полностью функциональный подход, который позволяет избежать чтения и разделения строк. Он использует модуль itertools :

    Примечание для python 3, замените itertools.imap на map

     import itertools def readwords(mfile): byte_stream = itertools.groupby( itertools.takewhile(lambda c: bool(c), itertools.imap(mfile.read, itertools.repeat(1))), str.isspace) return ("".join(group) for pred, group in byte_stream if not pred) 

    Использование образца:

     >>> import sys >>> for w in readwords(sys.stdin): ... print (w) ... I really love this new method of reading words in python I really love this new method of reading words in python It's soo very Functional! It's soo very Functional! >>> 

    Я думаю, в вашем случае это будет способ использования функции:

     with open('words.txt', 'r') as f: for word in readwords(f): print(word) 
    Python - лучший язык программирования в мире.