我做了一些搜索,但看不到如何实际编码。我是Python的新手,并不确定我应该使用什么方法来尝试这样做。
我有一些我想重命名的文件。不幸的是,文件扩展名的部分永远不会相同,只想删除它。
文件名就像AC_DC - 火焰击落(官方视频) - UKwVvSleM6w .mp3
任何帮助都将不胜感激。
答案 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"