Python:如何创建顺序文件名?

7 投票
3 回答
13248 浏览
提问于 2025-04-15 20:09

我想让我的程序能够按顺序写文件,比如:file1.txt、file2.txt、file3.txt。每次运行代码时,它只会写一个文件。它不能覆盖任何已经存在的文件,而且必须创建一个新文件。我现在有点困惑。

3 个回答

1

这是我实现这个功能的方法:

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)

感谢Darius Bacon提供的自然排序函数(可以查看他的回答这里: https://stackoverflow.com/a/341730

如果上面的代码看起来不太好,我很抱歉

3

或者你可以把当前的系统时间加到文件名后面,这样就能让文件名变得独一无二了...

4

有两种选择:

  1. 计数文件。

  2. 检查目录。

计数文件

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

count += 1

每次你创建一个新文件时,都要把计数文件里的数字更新到正确的值。这种方法非常快。不过,如果系统崩溃了,计数文件和新文件之间可能会出现不同步的情况。

你还可以让计数文件变得更聪明,把它做成一小段Python代码。

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

这样,当你更新文件时,就可以写一小段Python代码:count = someNumber。你还可以在这个文件里加上注释和其他标记,方便你管理记录。

检查目录

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

这种方法比较慢,但从来不会出现同步问题。

撰写回答