печать 10 слов за раз из текстового файла - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь распечатать первые 10 слов из текстового файла, затем следующие 10, затем следующие ...

вот что у меня в данный момент есть


text_file= open("read_it.txt", "r")
lines= text_file.readlines()
lineNum= 0
words= lines[lineNum].split()
wordNum= 0
text_file.close()


def printWords():
    global wordNum
    global lineNum
    global words
    lineNum= lineNum+1
    words= lines[lineNum].split()
    wordNum= 0
    print(words[wordNum])
    wordNum=wordNum+1
    print(words[wordNum])
    wordNum=wordNum+1

но мне нужно иметь эти 2 строки 10 раз, если я делаю это таким образом, мне интересно, есть ли более эффективный способ сделать это

1 Ответ

0 голосов
/ 08 марта 2020

Я бы предложил вам использовать регулярные выражения и разбивать их на слова, а не разбивать на строки и разбивать строки на слова. Я бы так и сделал

# Get list of words from file "word_filename", default to "test.txt"
def get_words(word_filename='test.txt'):
    # Regular expression library for re.split
    import re
    # Open the text file
    with open(word_filename, 'r') as file:
        # Generate the word list (Split with non-word as delimiter)
        yield from re.split(r'\W+', file.read())

# Get a list of "limit" words, default to 10
def get_n_words(limit=10):
    # Initialize the word list to store 10 words
    words = []
    # Loop through all the words
    for word in get_words():
        # Skip empty word
        if len(word) == 0: continue
        # Check if the word list have "limit" number of words
        if len(words) == limit:
            # Returns the word list
            yield words
            # Reset the word list
            words = []
        # The word list does not have enough size of "limit"
        else:
            # Insert the word
            words.append(word)
    # Check the remaining word list in case it doesn't have size of "limit"
    if len(words) > 0: yield words

# Loop through the 10 word lists
for ten_words in get_n_words():
    # Print the 10 words comma separated
    print(', '.join(ten_words))
...