Replace String in multiple text-files [SOLVED] - 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: Replace String in multiple text-files [SOLVED] (/thread-34528.html) |
Replace String in multiple text-files [SOLVED] - AlphaInc - Aug-06-2021 Hello everybody, In a previous post I got help to find a string in a text-file, replace it with an increasing number and save it: import re target = "String" def str_counter(match_object): str_counter.count += 1 return str(str_counter.count) str_counter.count = 0 with open('input.txt', 'r') as file : filedata = file.read() filedata = re.sub(re.escape(target), str_counter, filedata) a_file = open("input.txt", "w") text = filedata print(text, file=a_file) a_file.close()Now I would like to expand this and do this for every txt-file inside a folder. Is there a way to go through the whole directory, open every file, replace the string with an increasing counter and then save it to the same file? With my posted code I am able to do this for the one specified file but I'd like to do this for every text-file. RE: Replace String in multiple text-files - bowlofred - Aug-06-2021 Modify your code above to become a function. Have the function take the name of the file and operate on it. Then use glob.glob or Path.iterdir() (or os.scandir) to get all the files in a directory that you want. Loop over them and pass the filenames or filepaths to your function. RE: Replace String in multiple text-files - AlphaInc - Aug-07-2021 (Aug-06-2021, 11:06 PM)bowlofred Wrote: Modify your code above to become a function. Have the function take the name of the file and operate on it. Sorry to be so annoying but how do i do this exactly? I'm pretty new to python RE: Replace String in multiple text-files - Axel_Erfurt - Aug-07-2021 As bowlofred already wrote, make a function and then call it for every txt file import os folder_path = "/path/to/folder/" # your path for root, dirs, files in os.walk(folder_path, topdown = False): for name in files: if name.endswith(".txt"): file_name = os.path.join(root, name) print(file_name) #your_function(file_name) # call your function RE: Replace String in multiple text-files - AlphaInc - Aug-08-2021 (Aug-07-2021, 11:45 AM)Axel_Erfurt Wrote: As bowlofred already wrote, make a function and then call it for every txt file I tried to do it like this: #!/usr/bin/env python3 import os import re folder_path = "/home/pi/Workspace/Case_02/" # your path for root, dirs, files in os.walk(folder_path, topdown = False): for name in files: if name.endswith(".txt"): file_name = os.path.join(root, name) target = "Format" def str_counter(match_object): str_counter.count += 1 return str(str_counter.count) str_counter.count = 0 with open(file_name, 'r') as file : filedata = file.read() filedata = re.sub(re.escape(target), str_counter, filedata) with open(file_name, 'w') as file: file.write(filedata)I set an example with three different files (Out_01.txt, Out_02.txt, Out_03.txt) but the changes to my file were only written to Out_03.txt. Edit: I just needed to set the right amount of spaces per indentation level. RE: Replace String in multiple text-files - Axel_Erfurt - Aug-08-2021 You did not create a function and your indentations are disastrous, try this import os import re folder_path = "/home/pi/Workspace/Case_02/" # your path target = "Format" def str_counter(match_object): str_counter.count += 1 return str(str_counter.count) str_counter.count = 0 def do_it(file_name): with open(file_name, 'r') as file : filedata = file.read() print(filedata) filedata = re.sub(re.escape(target), str_counter, filedata) print(filedata) with open(file_name, 'w') as file: file.write(filedata) file.close() for name in os.listdir(folder_path): if name.endswith(".txt"): file_name = os.path.join(folder_path, name) do_it(file_name) |