简体   繁体   中英

printing the 10 words at a time from a txt file

I'm trying to print the first 10 words from a txt file, then the next 10, then the next...

here is what i currently have


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

but i have to have those 2 lines 10 times if i do it this way I'm wondering if there is a more efficient way of doing this

I would suggest you to use regex and split into words instead of splitting by line and splitting the line into words. The way I would do is as such

# 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))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM