【问题标题】:Rename files based on an input list Python根据输入列表 Python 重命名文件
【发布时间】:2014-10-14 14:03:02
【问题描述】:

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

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")

【问题讨论】:

  • 你有last_file = infiles[-1] 然后你尝试用for rename_files in last_file: 循环那个单一的路径我认为这不是你在问题文本中描述的那样。
  • for 循环是我后来尝试过的,看看它是否有什么不同。感谢您的捕获! @dawg

标签: python regex file batch-file rename


【解决方案1】:

前三行是正确的。

但是,要使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")

【讨论】:

  • 所以它再次根据修改日期重命名对吗?有什么办法可以根据文件名重命名吗?因为,例如,file1 在 file2 之前开始下载,但是很大,因此在 file2 之后完成,所以这个方法认为 file2 是 file1,因为它首先完成下载。对不起我的英语笨拙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
  • 2019-06-11
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
相关资源
最近更新 更多