Home > Mobile >  Python script to loop for files in subdirectories in order to change text and extension
Python script to loop for files in subdirectories in order to change text and extension

Time:06-09

enter image description hereI'm trying to loop through files in multiple subdirectories in order to : 1- Add some text inside the files (ending with .ext) 2- Change the extension of each file from .ext to .ext2

The script works fine when I have only one subdir in the main directory, but when I try to run the script on multiple subdirs it says: line 8, in with open(name, "r") as f: FileNotFoundError: [Errno 2] No such file or directory: "here the name of the subdir"

import os

directory = 'C:\\Users\\folder\\subfolders'

for dir, subdirs, files in os.walk(directory):
    for name in files:
        if name.endswith((".ext")):
            with open(name, "r") as f:
                XMLContent = f.readlines()
            XMLContent.insert(6, '<XMLFormat>\n')
            XMLContent.insert(40, '\n</XMLFormat>')

            with open(name, "w") as f:
                XMLContent = "".join(XMLContent)
                f.write(XMLContent)
            os.rename(os.path.join(dir, name), os.path.join(dir, name[:name.index('.ext')]  ".ext1")) 

Above is a screenshot of the sub dirs I have in the folder (1.Modified).

CodePudding user response:

you need to pass the directory to open the file

with open(os.path.join(directory, name), "r") as f:

But, I think the best way is use the os.listdir() to loop in the directory

for item in os.listdir(directory):
    if item.endswith(".ext"):
        with open(os.path.join(directory, item), "r") as r:

CodePudding user response:

I've also created a new folder called all and put in it three folders and for each folder, I've created 2 files of .ext type.

So, I was able to write inside each file of them and change its name as well.

import os

for root, dirs, files in os.walk("/Users/ghaith/Desktop/test/all"):
    for file in files:
        if file.endswith('.ext'):
            path = root   '/'   file

            with open(path, "r") as f:
                content = f.readlines()

            content.insert(1, '<XMLFormat>\n')
            content.insert(3, '\n</XMLFormat>')

            with open(path, "w") as f:
                content = "".join(content)
                f.write(content)

            os.rename(path, path '2') 

Output:

< XMLFormat >

< /XMLFormat >

  • Related