Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: How do I create sequential file names?

I want my program to be able to write files in a sequential format, ie: file1.txt, file2.txt, file3.txt. It is only meant to write a single file upon execution of the code. It can't overwrite any existing files, and it MUST be created. I'm stumped.

like image 783
Mister X Avatar asked Mar 08 '10 11:03

Mister X


People also ask

How do I create an incrementing filename in Python?

To create an incrementing file name in Python, run a while loop that checks the existence of a file, and if it exists, use Regex to modify the file name by replacing the integer at the end of the file with the next number.

How do you write file names in Python?

Python supports writing files by default, no special modules are required. You can write a file using the . write() method with a parameter containing text data. Before writing data to a file, call the open(filename,'w') function where filename contains either the filename or the path to the filename.

What are sequential files in Python?

In sequential access, you access the File data from the beginning of the File to the end of the File. If you need a piece of data that is stored near the end of the file then you have to go through all the data before it i.e. you have to read all the data and you cannot jump directly to the desired data.

How do you rename multiple files in Python?

To rename files in Python, use the rename() method of the os module. The parameters of the rename() method are the source address (old name) and the destination address (new name).


2 Answers

Two choices:

  1. Counter File.

  2. Check the directory.

Counter File.

with open("thecounter.data","r") as counter:
    count= int( counter.read() )

count += 1

Each time you create a new file, you also rewrite the counter file with the appropriate number. Very, very fast. However, it's theoretically possible to get the two out of synch. in the event of a crash.

You can also make the counter file slightly smarter by making it a small piece of Python code.

settings= {}
execfile( "thecounter.py", settings )
count = settings['count']

Then, when you update the file, you write a little piece of Python code: count = someNumber. You can add comments and other markers to this file to simplify your bookkeeping.

Check the directory.

import os
def numbers( path ):
    for filename in os.listdir(path):
        name, _ = os.path.splitext()
        yield int(name[4:])
count = max( numbers( '/path/to/files' ) )

count += 1

Slower. Never has a synchronization problem.

like image 160
S.Lott Avatar answered Oct 03 '22 08:10

S.Lott


Or you could append the current system time to make unique filenames...

like image 42
ultrajohn Avatar answered Oct 03 '22 06:10

ultrajohn