returning a list of words after reading a file in python

Depending on the size of the file, this seems like it would be as easy as:

with open(file) as f:
    words = f.read().split()

Replace the words_list.append(...) line in the for loop with the following:

words_list.extend(contents[i].split())

This will split each line on whitespace characters, and then add each element of the resulting list to words_list.

Or as an alternative method for rewriting the entire function as a list comprehension:

def read_words(words_file):
    return [word for line in open(words_file, 'r') for word in line.split()]

Here is how I'd write that:

def read_words(words_file):
  with open(words_file, 'r') as f:
    ret = []
    for line in f:
      ret += line.split()
    return ret

print read_words('test.txt')

The function can be somewhat shortened by using itertools, but I personally find the result less readable:

import itertools

def read_words(words_file):
  with open(words_file, 'r') as f:
    return list(itertools.chain.from_iterable(line.split() for line in f))

print read_words('test.txt')

The nice thing about the second version is that it can be made to be entirely generator-based and thus avoid keeping all of the file's words in memory at once.