【问题标题】:Batch Rename Every 5 Files in a Directory [closed]批量重命名目录中的每5个文件[关闭]
【发布时间】:2018-06-27 22:51:30
【问题描述】:

我有一个包含 500 个文件的目录,需要批量重命名。这些文件是通过谷歌驱动器表单收集的,申请人在该表单中提交 5 个标记为如下的个人文件:

CPW541_PersonalInformationSheet
CPW541_Resume
CPW541_ShortResponses
CPW541_Essay
CPW541_AcademicSummary
SEL285_PersonalInformationSheet
SEL285_Resume
SEL285_ShortResponses
SEL285_Essay
SEL285_AcademicSummary

我想将上述文件名批量重命名为(从目录顶部开始按字母顺序):

1_PersonalInformationSheet
1_Resume
1_ShortResponses
1_Essay
1_AcademicSummary
2_PersonalInformationSheet
2_Resume
2_ShortResponses
2_Essay
2_AcademicSummary

我尝试使用问题here 作为参考,但我无法理解如何重命名每五个文件。任何帮助将不胜感激!

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我尝试过使用mrrsoftware.com/namechanger,但它只有在您手动填充要替换的字符并将数字附加到这些字符时才有效。 (例如 CPW541 --> 1)。我也尝试使用我在底部引用的问题,但如果指定了更改或所有连字符都替换为破折号,那么它只是替换了文件。
  • 你对 python 的流利程度如何?
  • 我参加了 Python 入门课程,课程停在 OOO。自从我使用代码以来已经有一段时间了。我正在寻找的代码将用于我在 UT Austin 的一个学生组织。
  • 花点时间和the Tutorial一起练习例子。它会让你了解 Python 提供的工具来帮助你解决问题。

标签: python windows batch-file file-io rename


【解决方案1】:

假设顺序不重要,以下可能就足够了 - 获取文件列表,找出所有前缀和后缀(在 _ 上拆分),然后对于每个前缀,从 @987654322 重命名每个文件@到count_suffix

from os import listdir, rename
from os.path import join
suffixes = ['PersonalInformationSheet', 'Resume', 'ShortResponses', 'Essay', 'AcademicSummary']
filedir = "/tmp/foo"

prefixes = set(prefix.split('_')[0] for prefix in listdir(filedir))
for count, prefix in enumerate(prefixes):
    for suffix in suffixes:
        rename(
            join(filedir, "{}_{}".format(prefix, suffix)),
            join(filedir, "{}_{}".format(count+1, suffix))
        ) 

【讨论】:

  • 我收到“语法错误:编译单个语句时发现多个语句”。我也非常感谢您的帮助。
  • 这通常是由空格问题引起的,或者在 python shell 中将多行错误粘贴到一个提示符中。您是否尝试过将这些全部写入文件然后运行?
【解决方案2】:

*有人提出后缀是人工输入的,因此可能拼写错误,并非全部大写相同,等等。这应该可以解决问题:

from os import listdir, rename
from os.path import join, exists
filedir = "/tmp/foo/"

files = listdir(filedir)
prefixes = set(prefix.split('_')[0] for prefix in files)
suffixes = set(prefix.split('_')[1] for prefix in files)

for count, prefix in enumerate(prefixes):
    for suffix in suffixes:
    	if exists(filedir+prefix+'_'+suffix):
    		rename(filedir+prefix+'_'+suffix,filedir+str(count+1)+'_'+suffix)

这变成了我的测试目录:

asdf_part1
asdf_part2
fdsa_pt1
fdsa_ptTwo

进入:

1_part1
1_part2
2_pt1
2_ptTwo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2021-04-04
    • 1970-01-01
    • 2015-01-23
    • 2012-01-27
    相关资源
    最近更新 更多