gibarian
gibarian

Reputation: 145

Select some words from an existing file in Python

I want to separate the exact words of a text file (text.txt) ending in a certain string by using 'endswith'. The fact is that my variable

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

does not give what I want when I call it. On the other hand, if I try naming the open file

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

does not work either. Should I convert the text into a list first?

Comment: I hope this is not duplicate. It is not the same as this former question although close to it.

Upvotes: 0

Views: 861

Answers (4)

Martin Frodl
Martin Frodl

Reputation: 657

with open('text.txt') as f:
    words = [word for line in f for word in line.split() if word.endswith('os')]

Your first attempt does not read the file, or even open it. Instead, it loops over the characters of the string 'text.txt' and checks each of them if it ends with 'os'.

Your second attempt iterates over lines of the file, not words -- that's how a for loop works with a file handle.

Upvotes: 1

MaJoR
MaJoR

Reputation: 1044

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

This should work properly. Reasons it may be not working for you,

  1. You should strip the line first. There may be hidden ascii chars, like "\n". You can use rstrip() method for that. Something like this.

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

  1. After reading the file once, the w pointer reaches the End Of File (EOF), and hence any more read-operations will be in vain. To move the pointer back to the starting of the file, either use seek method, or re-open the file.

Upvotes: 0

degenTy
degenTy

Reputation: 360

Splitting the seperate words into a list (assuming they are seperated by spaces)

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

Then to get a list of the words ending in "os", like you had:

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

Upvotes: 1

Pedro Borges
Pedro Borges

Reputation: 1270

Open the file first and then process it like this:

with open('text.txt', 'r') as file:
        content = file.read()
h=[w for w in content.split() if w.endswith('os')]

Upvotes: 3

Related Questions