Delete Lines that Contain Words - Loop through files in a folder - Write to new files - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Delete Lines that Contain Words - Loop through files in a folder - Write to new files (/thread-18323.html) |
Delete Lines that Contain Words - Loop through files in a folder - Write to new files - dj99 - May-13-2019 Hi friends, I am trying to loop through files and from each file delete the lines that contain the search keywords import os def remove_line_from_file(filename, line_to_remove, dirpath=''): filename = os.path.join(dirpath, filename) temp_path = os.path.join(dirpath, 'temp.txt') with open(filename, 'r') as f_read, open(temp_path, 'w') as temp: search_keywords=['Car','Train'] # Delete all sentences that contain these words for line in f_read: if (any(map(lambda word: word in line, search_keywords))): if line.strip() == word: #f line.strip() == line_to_remove: continue temp.write(line) os.remove(filename) os.rename(temp_path, filename) directory = 'C:/Users/Home/Desktop/test/' dirpath, _, files = next(os.walk(directory)) for f in files: remove_line_from_file(f, line, dirpath)I dont get an error as such - but I cant work out why it doesnt work. It may not be syntactically correct as i borrowed code from here and there. Please may a kind person have a look at this thank you for your time and help RE: Delete Lines that Contain Words - Loop through files in a folder - Write to new files - heiner55 - May-13-2019 #!/usr/bin/python3 import os def remove_line_from_file(filename, dirpath): filename = os.path.join(dirpath, filename) temp_path = os.path.join(dirpath, filename + '.tmp') search_keywords = ['Car','Train'] with open(filename, 'r') as f_read, open(temp_path, 'w') as temp: for line in f_read: found = False for word in search_keywords: if word in line: found = True if not found: temp.write(line) #os.rename(temp_path, filename) #main directory = './' for root, dirs, files in os.walk(directory): for f in files: remove_line_from_file(f, directory) #done RE: Delete Lines that Contain Words - Loop through files in a folder - Write to new files - dj99 - May-13-2019 Thank you my dear friend heiner55. I am so happy because I have been trying for days to work out the correct syntax for this. I guess i didnt need the lambda thing if (any(map(lambda word: word in line, search_keywords))): Simplicity is the best My files have so much garbage and it was very hard for me to find these line and manually delete them one after the other Thank you so much again for lending your programming eyes and time to help me. Python hero! I really apreciate it so much Hope you have a great week! :) RE: Delete Lines that Contain Words - Loop through files in a folder - Write to new files - heiner55 - May-18-2019 Glad to hear. |