2014-11-12 7 views
0

Я хочу вернуть все слова, найденные в текстовом файле. Это код, который у меня есть.Как вернуть список слов из текстового файла в python

def get_dictionary_word_list(): 
    f = open('dictionary.txt') 
    for word in f.read().split(): 
     print(word) 

Он работает с использованием печати fucntion, но вместо того, чтобы печатать слова я хочу, чтобы вернуть все слова в текстовом файле. Используя return, он показывает только «aa», а не слова в файле. Я не уверен, почему он не работает с возвратом?

+0

вы хотите, чтобы все 2 выбора слов из файла? – Kasramvd

ответ

1

Если вы использовали возврат в цикле, он возвращался на первую итерацию, и вы только вернули первое слово.

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

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

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

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 

Чтобы получить ключ, ценность предметов обратно, вы можете использовать что-то вроде этого, чтобы вернуть generator (имейте в виду, что файл остается открытым, пока генератор остается открытым). Вы можете изменить его, чтобы вернуть только слова, если это то, что вы хотите, это довольно просто:

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

Пример вывода для первой функции:

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'] 
+0

Это не то, о чем он просит. –

+1

Что ** ** он спрашивает? Похоже, он использовал возврат вместо печати, который остановил цикл и вернул первое слово в одиночку. –

+0

@reutsharabani Мне просто нужна простая функция, которая возвращает все слова, хранящиеся в файле. Я использовал первый код, который вы упомянули, но он не вернул никаких слов, которые были пустыми? Мой код работает, но не работает с функцией возврата – alfiej12

0
def get_dictionary_word_list(): 
    f = open('dictionary.txt') 
    ll=[] 
    for word in f.read().split(): 
     ll.append(word) 
    return ll 

Попробуйте через список

+1

Почему бы не просто 'return f.read(). Split()'? –

0

Просто попробуйте следующее: -

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

с 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() 
1

Как об этом:

def get_dictionary_word_list(fname): 
    with open(fname) as fh: 
     return set(fh.read().split()) 
Смежные вопросы