Выберите несколько слов из существующего файла в Python - PullRequest
0 голосов
/ 27 ноября 2018

Я хочу отделить точные слова текстового файла ( text.txt ), оканчивающиеся на определенную строку, с помощью «заканчивается».Дело в том, что моя переменная

h=[w for w in 'text.txt' if w.endswith('os')] 

не дает того, что я хочу, когда я ее называю.С другой стороны, если я попытаюсь назвать открытый файл,

f=open('text.txt')
h=[w for w in f if w.endswith('os')]

тоже не будет работать.Должен ли я сначала преобразовать текст в список?

Комментарий: надеюсь, это не дубликат.Это не то же самое, что этот прежний вопрос , хотя и близко к нему.

Ответы [ 4 ]

0 голосов
/ 27 ноября 2018
f=open('text.txt')
h=[w for w in f if w.endswith('os')]

Это должно работать правильно.Причины, по которым он может не работать,

  1. Вы должны strip в первую очередь.Там могут быть скрытые символы ascii, такие как \ n.Для этого вы можете использовать метод rstrip().Как то так.

h=[w.rstrip() for w in f if w.rstrip().endswith('os')]

После однократного чтения файла указатель w достигает конца файла (EOF), и, следовательно, любые другие операции чтения будут тщетными.Чтобы переместить указатель назад к началу файла, используйте метод seek или заново откройте файл.
0 голосов
/ 27 ноября 2018

Сначала откройте файл, а затем обработайте его следующим образом:

with open('text.txt', 'r') as file:
        content = file.read()
h=[w for w in content.split() if w.endswith('os')]
0 голосов
/ 27 ноября 2018

Разделение отдельных слов в список (при условии, что они разделены пробелами)

f = open('text.txt').read().split(' ')

Затем, чтобы получить список слов, оканчивающихся на "os", как у вас было:

h=[w for w in f if w.endswith('os')]
0 голосов
/ 27 ноября 2018
with open('text.txt') as f:
    words = [word for line in f for word in line.split() if word.endswith('os')]

Ваша первая попытка не прочитать файл или даже открыть его.Вместо этого он зацикливается на символах строки 'text.txt' и проверяет каждый из них, заканчивается ли он на 'os'.

Ваша вторая попытка повторяется по строкам файла, а не по словам - вот как *Цикл 1006 * работает с дескриптором файла.

...