Help please! Filtering a txt file in python3

Hey Programmers :slight_smile:

I could really use some help with my school assignment. We’re asked to write a program to filter a txt file. The filter should only show the three letter words.

Untill now, we’ve only learned the ‘‘basic functions’’ like def main()
.count
len()

This shouldn’t be too hard for experienced programmers.

This is what I have until now:

import sys

def main(): 
string = open("verhaaltje.txt", "r")
words = [word for word in string.split() if len(word)==3]
	
file.close()



print (str(words))
	
main()

I get this error: AttributeError: ‘_io.TextIOWrapper’ object has no attribute ‘split’

1 Like

Remember. Homework isn’t meaningful unless you take something from it. Getting the work done all for you doesn’t help you later on. Just a thought…

5 Likes

I am very aware of this. Programmers usually provide a code with explanation.

1 Like

Hi @ruri5061864045

Yes, but teachers usually expect a student to turn in work which is their own.

You should get comfortable with reading technical documentation, especially for programming, as it’s rather useful for learning how to do new things in a given language.

This shouldn’t be too hard for you, either.

You’re getting a very clear error:

AttributeError: ‘_io.TextIOWrapper’ object has no attribute ‘split’

Python is telling you that the object in your variable string has no method of .split().

Perhaps you should review what object comes back when you call the open() function in Python, and see if you can figure it out from there?

4 Likes
import sys

def main(): 
    string = open("verhaaltje.txt", "r")
    words = [word for word in string.read().split() if len(word)==3]
    string.close()

    print (str(words))
	
main()

This actually works, but it doesn’t print the words line per line. Does anybody know how to implement this?

Please show a brief example of the input file, what output you would like to see, and what you are actually getting. Then we might have something to discuss.

3 Likes

This is the output that I am getting: (three letter words filtered from the txt as a list)
[‘Een’, ‘van’, ‘een’, ‘een’, ‘een’, ‘dat’, ‘was’, ‘een’, ‘Hij’, ‘dat’, ‘hij’, ‘dat’, ‘was’, ‘als’, ‘het’, ‘was’, ‘wel’, ‘een’, ‘ook’, ‘van’, ‘van’, ‘van’, ‘was’, ‘een’, ‘het’, ‘was’, ‘nog’, ‘met’, “z’n”, ‘bij’, ‘aan’, ‘ze:’, ‘dat’, ‘het’, ‘Dat’, ‘wij’, ‘wel’, ‘uit’, ‘met’, “z’n”, ‘dat’, ‘het’, ‘een’, ‘het’, ‘van’, ‘zon’, ‘aan’, ‘het’, ‘van’, ‘van’, ‘tot’, ‘kon’, ‘het’, ‘van’, ‘bij’, ‘van’, ‘wel’, ‘van’, ‘dat’, ‘"Je’, ‘zei’, ‘was’, ‘dat’, “z’n”, ‘Hij’, ‘het’, ‘had’, ‘een’, ‘die’, ‘een’, ‘het’, ‘was’, ‘een’, ‘die’, ‘hem’, ‘een’, ‘had’, ‘uit’, ‘een’, ‘van’, ‘die’, ‘een’, ‘hij’, ‘het’, ‘met’, ‘het’, ‘het’, ‘een’, ‘van’, ‘het’, ‘het’, ‘dat’, ‘het’, ‘een’, ‘uit’, ‘wel’, ‘die’, ‘kak’, ‘die’, ‘van’, ‘het’, ‘van’, ‘in,’, ‘tot’, ‘het’, ‘uit’, ‘van’, ‘van’, ‘ene’, ‘van’, ‘het’, ‘Het’, ‘hun’, ‘hun’, “z’n”, ‘met’, ‘van’, ‘het’, ‘was’, ‘hij’, ‘pas’, ‘Hij’, ‘kak’, ‘als’, ‘het’, ‘dan’, ‘het’]

This is what I would like to see: (three letter words per line filtered from the txt file)
een van een
een een dat
was een
hij dat was
nee hij dat was als het kon
was wel een ook
van
van van
was
een dag het was nog met bij aan dat het dat wij wel
uit met dat het een was
het van zon aan het van van tot
kon het van bij van wel van
dat
wel zei
weg
was dat was
hij het
had een die een was
het was een die hem een had
uit een van die een
hij het met het het een uit
van het het dat het een had
uit wel
die kak die
van het van tot het uit van
van ene van het
het hun hun met
van het aan
was hij pas
hij kak
als het dan het nog

I think that the problem is that you are losing the information that tells you when a new line begins.

You can use repr() to show you the actual stream of characters you are dealing with:

def main(): 
    string = open("verhaaltje.txt", "r")
    print(repr(string.read()))
    string.close()

Run that and then analyze the output.

5 Likes