Search code examples
pythonline

Read lines from one file and write to another file but remove lines that contain certain string


I'm trying to read a text from a text file, read lines, delete lines that contain specific string (in this case 'bad' and 'naughty'). The code I wrote goes like this:

infile = file('./oldfile.txt')

newopen = open('./newfile.txt', 'w')
for line in infile :

    if 'bad' in line:
        line = line.replace('.' , '')
    if 'naughty' in line:
        line = line.replace('.', '')
    else:
        newopen.write(line)

newopen.close()

I wrote like this but it doesn't work out.

One thing important is, if the content of the text was like this:

good baby
bad boy
good boy
normal boy

I don't want the output to have empty lines. so not like:

good baby

good boy
normal boy

but like this:

good baby
good boy
normal boy

What should I edit from my code on the above?


Solution

  • You can make your code simpler and more readable like this

    bad_words = ['bad', 'naughty']
    
    with open('oldfile.txt') as oldfile, open('newfile.txt', 'w') as newfile:
        for line in oldfile:
            if not any(bad_word in line for bad_word in bad_words):
                newfile.write(line)
    

    using a Context Manager and any.