【问题标题】:Select a specific part of file name move it to the beginning选择文件名的特定部分将其移至开头
【发布时间】:2018-07-29 00:16:03
【问题描述】:

我有一些视频课程想用 Python 以特定方式重命名。这是一个示例文件名:

3D Graphics - Crash Course Computer Science #27-TEAtmCYYKZA.en"

我想选择“27”并将其移动到文件名的开头,并完全删除“Crash Course Computer Science #”和“-TEAtmCYYKZA.en”部分。所以,我想要的输出是:

27 - 3D Graphics

另外两个例子:

Advanced CPU Designs - Crash Course Computer Science #9-rtAlC5J1U40
Boolean Logic & Logic Gates - Crash Course Computer Science #3-gI-qXk7XojA

到:

9 - Advanced CPU Designs
3 - Boolean Logic & Logic Gates

我知道如何删除部分,但我可以找到如何选择“# number”子字符串。我找到了一个 .split() 函数,但我还是看不到如何让它工作。

这是我到目前为止所写的,但我已经陷入了早期阶段。

import os

def rename():
    file_list = os.listdir(r"D:\Downloads\New folder")

    for file_name in file_list:
        os.rename(file_name, )

rename() 

【问题讨论】:

  • 请将您的问题更新为您尝试过的代码,即使它不起作用。然后我们就可以了解您遇到的困难。
  • 你应该发布更多的例子来说明文件名现在的样子,以及你想把它们变成什么。
  • 你可能会想要一个regular expression
  • 您为什么将答案编辑到问题中?

标签: python renaming


【解决方案1】:

鉴于您的示例,无需使用正则表达式即可轻松完成:

代码:

def transform_name(filename):
    number = filename.split('#')[1].split('-')[0].strip()
    name = filename.split('-')[0].strip()
    return '{} - {}'.format(number, name)

在示例中使用:

os.rename(existing_filename, transform_name(existing_filename))

测试代码:

test_in = (
    "3D Graphics - Crash Course Computer Science #27-TEAtmCYYKZA.en",
    "Advanced CPU Designs - Crash Course Computer Science #9-rtAlC5J1U40",
    "Boolean Logic & Logic Gates - Crash Course Computer Science #3-gI-qXk7XojA",
)

desired_out = (
    "27 - 3D Graphics",
    "9 - Advanced CPU Designs",
    "3 - Boolean Logic & Logic Gates",
)

for data in zip(test_in, desired_out):
    assert transform_name(data[0]) == data[1], "{} != {}".format(
        transform_name(data[0]), data[1])

【讨论】:

  • 坦率地说,我在 Python 或编程方面并不先进,所以我无法以任何方式实现您的代码。我了解您将文件名拆分两次然后再次组合的做法,但从那时起我无法继续。而且我不明白测试代码部分发生了什么。我编辑并更新了代码,现在我收到“[WinError 2] 系统找不到指定的文件”错误。
  • 测试代码只是测试代码。我通常为我写它,以便快速和简单。我将其放入答案中,以便以后可以在需要时重新测试。是不是有什么答案代码不清楚的地方?
  • 我从您的问题编辑中看到了您的困惑。我添加了更多内容,希望能阐明如何使用答案。
  • 显然,文件扩展名引起了一些问题,但我不知道为什么。这就是为什么我如此挣​​扎。我用另一个 python 脚本从文件名中批量删除扩展名,用你的代码重命名它们,然后用另一个 python 脚本再次添加扩展名前缀。这不是最好的方法,但我仍然学到了很多,这是我的第一个目标,而不是重命名文件。 :) 毕竟,我可以在 2 分钟内手动重命名它们。谢谢!
【解决方案2】:

我喜欢@StephenRauch 不带正则表达式的答案,这只是为了显示另一个选项。

>>> import re
>>> REGEX = re.compile(r'(?P<name>.+) - .+ #(?P<number>\d+)')
>>> test_in = (
...     "3D Graphics - Crash Course Computer Science #27-TEAtmCYYKZA.en",
...     "Advanced CPU Designs - Crash Course Computer Science #9-rtAlC5J1U40",
...     "Boolean Logic & Logic Gates - Crash Course Computer Science #3-gI-qXk7XojA",
... )
>>> for line in test_in:
...     m = REGEX.match(line)
...     if m:
...         print('{number} - {name}'.format(**m.groupdict()))
... 
27 - 3D Graphics
9 - Advanced CPU Designs
3 - Boolean Logic & Logic Gates

【讨论】:

    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2021-09-26
    相关资源
    最近更新 更多