删除部分文件名

时间:2017-04-19 16:39:54

标签: file rename file-rename

我做了一些搜索,但看不到如何实际编码。我是Python的新手,并不确定我应该使用什么方法来尝试这样做。

我有一些我想重命名的文件。不幸的是,文件扩展名的部分永远不会相同,只想删除它。

文件名就像AC_DC - 火焰击落(官方视频) - UKwVvSleM6w .mp3

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

由于这看起来像youtube-dl的结果,“随机”子字符串很可能是唯一的视频ID,根据我的经验,它总是11个字符长。但是,它可以包含破折号(-),因此smitrp建议的正则表达式方法并不总是有效。

我使用这种“脏”的解决方法:

>>> original_name="AC_DC - Shot Down In Flames (Official Video)-UKwVvSleM6w.mp3"
>>> new_name=original_name[:-16]+".mp3"
>>> new_name
'AC_DC - Shot Down In Flames (Official Video).mp3'

编辑:

如果您真的,真的想要找到“-XXXX”部分,请查看str.rfind()。这将帮助您找到最后一个短划线(-)的索引,您可以直接使用该索引作为字符串的切片表示法。

声明:

如果视频ID包含短划线,则提供错误的结果,例如在这里:https://www.youtube.com/watch?v=7WVBEB8-wa0

然后你会找到最后一个破折号,删除-wa0并在文件名末尾留下-7WVBEB8

答案 1 :(得分:0)

利用上面答案的思路,还可以考虑到一个普通的词不 包含多个大写字符。

def youtube_name_fix(folder):
    import os
    from pathlib import Path
    import re
    REGEX = re.compile(r'[A-Z]')

    for name in os.listdir(folder):
        basename = Path(name)
        last_12 = basename.stem[-12:]
        # check if the end string is not all uppercase (then it could be part of a valid name)
        if not last_12.isupper():
            # check if the last string has more than one uppercase letters
            if len(REGEX.findall(last_12)) > 1:
                # remove the end youtube string and create new full path
                new_name = os.path.join(folder, basename.stem[:-12] +  basename.suffix)
                try:
                    os.rename(os.path.join(folder,name), new_name)
                except Exception as e:
                    print(e)

> youtube_name_fix(p)
old name -> "4-Discrete and Continuous Probability Models-esHwigpYggU.mp4"
new name -> "4-Discrete and Continuous Probability Models.mp4"