根据文件夹中以前的文件版本更改输出文件名
Change output filename accordingly to previous file versions in a folder
在 Python 脚本中,我创建了一个输出文件。
我希望它的名称相应地更改为输出文件夹中的旧版本。
例如:
output_file_name = 'output.txt'
if output.txt already exists --> output_file_name = output_(2).txt
if output_(2).txt already exists --> output_file_name = output_(3).txt
...
我的试用期:
import os.path
def check_versions(last_version_filename):
# if an output_file_name_(n).txt is present then
# return output_file_name(n+1).txt
#extract the version of the file inside the output folder
try:
old_version = last_version_filename.split('(')[1].split(')')[0]
# case in which no output_(n).txt version are present
except IndexError:
old_version = 1
if old_version == 1:
to_be_replaced = '.txt'
else:
to_be_replaced = '_({}).txt'.format(old_version)
new_version = int(old_version) + 1
last_version_filename = last_version_filename.replace(to_be_replaced,'_({}).txt'.format(new_version))
OUTPUT_FILE_NAME = 'output.txt'
# if output.txt file already exists, then we need to modify its name
if os.path.isfile('./' + OUTPUT_FILE_NAME):
# last_file_version is the name of the last version file in the folder
OUTPUT_FILE_NAME = check_versions(last_version_filename)
那么如何查看文件夹中文件的最新版本呢?考虑到它的格式总是 output_(n).txt
。所以最大的 n
决定最后的文件版本。
此外,这段代码的主要错误是如果
它工作正常
output.txt
output_(2).txt
.
.
.
output_(n).txt
都在场。但是如果缺少 output.txt
,代码将创建 output.txt
作为最新版本的输出文件。因此,您将拥有 output.txt
,它比 output_(2).txt
更新。这可能会很棘手。
同样,很明显我需要知道哪个是最新版本,然后相应地命名输出文件。
你会如何解决这个问题?
您可以根据您的模式对目录中存在的文件名进行排序,然后在最后一个的数字上加一:
import os
import re
valid_filenames = [filename for filename in os.listdir(os.curdir) if filename.startswith('output_')]
n_valid = len(valid_filenames)
if n_valid == 0:
if os.path.isfile('output.txt'):
next_filename = 'output_(2).txt'
else:
next_filename = 'output.txt'
else:
regex = re.compile(r'\((\d+)\)')
tagged_filenames = sorted((int(regex.search(filename).group(1)), filename) for filename in valid_filenames)
next_filename = f'output_({int(tagged_filenames[-1][0]) + 1}).txt'
在 Python 脚本中,我创建了一个输出文件。 我希望它的名称相应地更改为输出文件夹中的旧版本。 例如:
output_file_name = 'output.txt'
if output.txt already exists --> output_file_name = output_(2).txt
if output_(2).txt already exists --> output_file_name = output_(3).txt
...
我的试用期:
import os.path
def check_versions(last_version_filename):
# if an output_file_name_(n).txt is present then
# return output_file_name(n+1).txt
#extract the version of the file inside the output folder
try:
old_version = last_version_filename.split('(')[1].split(')')[0]
# case in which no output_(n).txt version are present
except IndexError:
old_version = 1
if old_version == 1:
to_be_replaced = '.txt'
else:
to_be_replaced = '_({}).txt'.format(old_version)
new_version = int(old_version) + 1
last_version_filename = last_version_filename.replace(to_be_replaced,'_({}).txt'.format(new_version))
OUTPUT_FILE_NAME = 'output.txt'
# if output.txt file already exists, then we need to modify its name
if os.path.isfile('./' + OUTPUT_FILE_NAME):
# last_file_version is the name of the last version file in the folder
OUTPUT_FILE_NAME = check_versions(last_version_filename)
那么如何查看文件夹中文件的最新版本呢?考虑到它的格式总是 output_(n).txt
。所以最大的 n
决定最后的文件版本。
此外,这段代码的主要错误是如果
它工作正常output.txt
output_(2).txt
.
.
.
output_(n).txt
都在场。但是如果缺少 output.txt
,代码将创建 output.txt
作为最新版本的输出文件。因此,您将拥有 output.txt
,它比 output_(2).txt
更新。这可能会很棘手。
同样,很明显我需要知道哪个是最新版本,然后相应地命名输出文件。
你会如何解决这个问题?
您可以根据您的模式对目录中存在的文件名进行排序,然后在最后一个的数字上加一:
import os
import re
valid_filenames = [filename for filename in os.listdir(os.curdir) if filename.startswith('output_')]
n_valid = len(valid_filenames)
if n_valid == 0:
if os.path.isfile('output.txt'):
next_filename = 'output_(2).txt'
else:
next_filename = 'output.txt'
else:
regex = re.compile(r'\((\d+)\)')
tagged_filenames = sorted((int(regex.search(filename).group(1)), filename) for filename in valid_filenames)
next_filename = f'output_({int(tagged_filenames[-1][0]) + 1}).txt'