Python: How do I create sequential file names?

后端 未结 3 1360
星月不相逢
星月不相逢 2020-12-06 08:11

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.

相关标签:
3条回答
  • 2020-12-06 08:28

    Here is the way I implemented this:

    import os
    import glob
    import re
    
    #we need natural sort to avoid having the list sorted as such:
    #['./folder1.txt', './folder10.txt', './folder2.txt', './folder9.txt']
    def sorted_nicely(strings):
        "Sort strings the way humans are said to expect."
        return sorted(strings, key=natural_sort_key)
    
    def natural_sort_key(key):
        import re
        return [int(t) if t.isdigit() else t for t in re.split(r'(\d+)', key)]
    
    #check if folder.txt exists
    filename = "folder.txt" #default file name
    
    #if it does find the last count
    if(os.path.exists(filename)):
            result = sorted_nicely( glob.glob("./folder[0-9]*.txt"))
            if(len(result)==0):
                    filename="folder1.txt"
            else:
                    last_result = result[-1]
                    number = re.search( "folder([0-9]*).txt",last_result).group(1)
                    filename="folder%i.txt"%+(int(number)+1)
    

    Thanks to Darius Bacon for the natural sort functions(see his answer here: https://stackoverflow.com/a/341730)

    Sorry if the above code is fugly

    0 讨论(0)
  • 2020-12-06 08:29

    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.

    0 讨论(0)
  • 2020-12-06 08:33

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

    0 讨论(0)
提交回复
热议问题