Python 选择文件名的特定部分将其移到开头
我有一些视频课程,我想用Python以特定的方式重命名它们。以下是一个示例文件名:Python 选择文件名的特定部分将其移到开头,python,renaming,Python,Renaming,我有一些视频课程,我想用Python以特定的方式重命名它们。以下是一个示例文件名: 3D Graphics - Crash Course Computer Science #27-TEAtmCYYKZA.en" 我想选择27并将其移到文件名的开头,然后删除速成课程“计算机科学”和-teatmcykza.en部分。所以,我想要的输出是: 27 - 3D Graphics 还有两个例子: Advanced CPU Designs - Crash Course Computer Science #
3D Graphics - Crash Course Computer Science #27-TEAtmCYYKZA.en"
我想选择27并将其移到文件名的开头,然后删除速成课程“计算机科学”和-teatmcykza.en部分。所以,我想要的输出是:
27 - 3D Graphics
还有两个例子:
Advanced CPU Designs - Crash Course Computer Science #9-rtAlC5J1U40
Boolean Logic & Logic Gates - Crash Course Computer Science #3-gI-qXk7XojA
致:
我知道如何做删除部分,但我可以找到如何选择数字子字符串。我找到了一个.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()
根据您的示例,这在没有正则表达式的情况下很容易实现,如: 代码: 在示例中使用: 测试代码: 我喜欢的答案没有正则表达式,这只是为了显示另一个选项
>>> 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
请用您尝试过的代码更新您的问题,即使它不起作用。然后我们就可以了解您遇到的困难。您应该再发布一些文件名的外观示例,以及您试图将其制作成什么样的文件名。您可能会想知道为什么要将答案编辑到问题中?坦率地说,我在Python或编程方面还不太先进,因此我无法以任何方式实现您的代码。我理解你将文件名拆分两次,然后再合并,但我无法从那时开始。我不明白测试代码部分发生了什么。我编辑并更新了代码,现在我得到一个[WinError 2],系统找不到指定的文件错误。测试代码只是测试代码。我通常是为自己写的,既快又简单。我把它写在答案里,以便以后需要时可以重新测试。答案代码有什么不清楚的地方吗?我从你的问题编辑中看到你的困惑。我补充了一些,希望能澄清如何使用答案。显然,文件扩展名引起了一些问题,尽管我不知道为什么。这就是我为什么如此挣扎的原因。我用另一个python脚本从文件名中批量删除扩展名,用代码重命名它们,然后用另一个python脚本再次添加扩展名前缀。这不是最好的方法,但我仍然学到了很多,这是我的第一个目标,不重命名文件毕竟,我可以在2分钟内手动重命名它们。非常感谢。
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])
>>> 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