簡體   English   中英

選擇文件名的特定部分將其移至開頭

[英]Select a specific part of file name move it to the beginning

我有一些視頻課程,我想用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() 

鑒於您的示例,這很容易完成,沒有正則表達式,如:

碼:

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

我喜歡沒有正則表達式的@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM