gpt4 book ai didi

python - 基于输入列表 Python 重命名文件

转载 作者:行者123 更新时间:2023-11-28 22:48:10 25 4
gpt4 key购买 nike

我在一个目录中有一堆文件。它们会自动以下列名称下载:

new.pdb
new(1).pdb
new(2).pdb and so on

我有一个实际文件名的列表,例如:

AAA
BBB
CCC

我想要一种方法来重命名列表中文件的相应名称,其中 new.pdb 将是 AAA.pdb,new(1).pdb 将是 BBB.pdb 等等。如果您能在投反对票之前给我提示,我将不胜感激。我已经尽力解决这个问题但没能成功。到目前为止我已经试过了。但以下代码的问题在于,一些文件的下载速度可能比之前启动的文件快。所以它不会像我想要的那样重命名。

    infiles = filter(os.path.isfile, os.listdir(os.getcwd()))
infiles = [os.path.join(os.getcwd(), f) for f in infiles]
infiles.sort(key=lambda x: os.path.getmtime(x))
last_file = infiles[-1]
if rename_files.endswith(".pdb"):
os.rename(last_file, directory_name+".pdb")

最佳答案

前三行是正确的。

但是,对于 for <variable> in <collection>构建工作,<collection>需要是一个集合。 last_file是字符串,因此是字符的集合;并且单个字符不可能以 .pdb 结尾.

假设rename_files是新名称的列表,您需要在前三行之后:

infiles = (infile for infile in infiles if infile.endswith(".pdb"))
for infile, outfile in zip(infiles, rename_files):
os.rename(infile, outfile + ".pdb")

zip将从列表中创建一个对列表,因此您首先找到所有 pdb 文件,将它们与新名称配对,然后根据对重命名每个文件。

编辑:如果您想按文件名而不是原始文件名 mtime ,您需要提取该数字并按其排序:

def get_rank(infile):
m = re.search(r'(?:\((\d+)\))[^()]*', infile)
if m:
return int(m.group(1))
return 0
infiles = filter(os.path.isfile, os.listdir(os.getcwd()))
infiles = [os.path.join(os.getcwd(), f) for f in infiles if f.endswith('.txt')]
filerank = (get_rank(infile) for infile in infiles)
renames = zip(filerank, infiles, rename_files)
renames.sort(key=lambda x: x[0])
for _, infile, outfile in renames:
os.rename(infile, outfile + ".pdb")

关于python - 基于输入列表 Python 重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25417838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com