Reputation: 441
I want to return all words found in a text file. This is the code i have so far.
def get_dictionary_word_list():
f = open('dictionary.txt')
for word in f.read().split():
print(word)
It works using the print fucntion but instead of printing the words i want to return all the words in the text file. Using return it only shows 'aa' and not the words in the file. Im not sure why it's not working with return?
Upvotes: 4
Views: 16445
Reputation: 99
How about this:
def get_dictionary_word_list(fname):
with open(fname) as fh:
return set(fh.read().split())
Upvotes: 1
Reputation: 31339
If you used return in the loop, it returned on the first iteration and you only got back the first word.
What you want is an aggregation of the words - or better yet, return the array you got back from splitting the words. You may want to sanitize line breaks.
def get_dictionary_word_list():
# with context manager assures us the
# file will be closed when leaving the scope
with open('dictionary.txt') as f:
# return the split results, which is all the words in the file.
return f.read().split()
To get a dictionary back, you can use this (takes care of line breaks):
def get_dictionary_word_list():
# with context manager assures us the
# file will be closed when leaving the scope
with open('dictionary.txt') as f:
# create a dictionary object to return
result = dict()
for line in f.read().splitlines():
# split the line to a key - value.
k, v = line.split()
# add the key - value to the dictionary object
result[k] = v
return result
To get key,value items back, you can use something like this to return a generator (keep in mind the file will be left open as long as the generator remains open). You can modify it to return just words if that's what you want, it's pretty straightforward:
def get_dictionary_word_list():
# with context manager assures us the
# file will be closed when leaving the scope
with open('dictionary.txt') as f:
for line in f.read().splitlines():
# yield a tuple (key, value)
yield tuple(line.split())
Example output for the first function:
xxxx:~$ cat dictionary.txt
a asd
b bsd
c csd
xxxx:~$ cat ld.py
#!/usr/bin/env python
def get_dictionary_word_list():
# with context manager assures us the
# file will be closed when leaving the scope
with open('dictionary.txt') as f:
# return the split results, which is all the words in the file.
return f.read().split()
print get_dictionary_word_list()
xxxx:~$ ./ld.py
['a', 'asd', 'b', 'bsd', 'c', 'csd']
Upvotes: 4
Reputation: 5061
Simply try this:-
def func():
with open('new.txt') as f:
return f.read() # returns complete file,
with open('out.txt', 'w+') as w:
w.write(func())
w.seek(0)
print w.read()
with Generators
:-
def func():
with open('new.txt') as f:
yield f.read()
data = func()
with open('out2.txt', 'w+') as w:
for line in data:
w.write(line) #or you may use map(w.write, line)
w.seek(0)
print w.read()
Upvotes: 0
Reputation: 67968
def get_dictionary_word_list():
f = open('dictionary.txt')
ll=[]
for word in f.read().split():
ll.append(word)
return ll
Try through a list
Upvotes: 0