I'm creating a program that will create a file and save it to the directory with the filename sample.xml. Once the file is saved when i try to run the program again it overwrites the old file into the new one because they do have the same file name. How do I increment the file names so that whenever I try to run the code again it will going to increment the file name. and will not overwrite the existing one. I am thinking of checking the filename first on the directory and if they are the same the code will generate a new filename:
fh = open("sample.xml", "w")
rs = [blockresult]
fh.writelines(rs)
fh.close()
Another example using recursion
Use:
I would iterate through
sample[int].xml
for example and grab the next available name that is not used by a file or directory.That should give you sample0.xml initially, then sample1.xml, etc.
Note that the relative file notation by default relates to the file directory/folder you run the code from. Use absolute paths if necessary. Use
os.getcwd()
to read your current dir andos.chdir(path_to_dir)
to set a new current dir.You can use a while loop with a counter which checks if a file with a name and the counter's value exists if it does then move on else break and make a file.
I have done it in this way for one of my projects:`
`
Here the counter i starts from 0 and a while loop checks everytime if the file exists, if it does it moves on else it breaks out and creates a file from then you can customize. Also make sure to close it else it will result in the file being open which can cause problems while deleting it. I used path.exists() to check if a file exists. Don't do
from os import *
it can cause problem when we use open() method as there is another os.open() method too and it can give the error.TypeError: Integer expected. (got str)
Else wish u a Happy New Year and to all.Another solution that avoids the use of while loop is to use
os.listdir()
function which returns a list of all the files and directories contained in a directory whose path is taken as an argument.To answer the example in the question, supposing that the directory you are working in only contains "sample_i.xlm" files indexed starting at 0, you can easily obtain the next index for the new file with the following code.
The two ways to do it are:
an easy way to do it off the bat would be:
as a design thing,
while True
slows things down and isn't a great thing for code readabilityedited: @EOL contributions/ thoughts
so I think not having .format is more readable at first glance - but using .format is better for generality and convention so.
and you don't have to use abspath - you can use relative paths if you prefer, I prefer abs path sometimes because it helps to normalize the paths passed :).
Without storing state data in an extra file, a quicker solution to the ones presented here would be to do the following:
This will also keep incrementing, even if some of the lower numbered files disappear.
The other solution here that I like (pointed out by Eiyrioü) is the idea of keeping a temporary file that contains your most recent number: