如何自动重命名从pytube下载的文件?

时间:2019-03-26 00:46:58

标签: python python-3.x rename pytube

我是Python的新手,过去(很多年前)仅使用PHP 5。作为一个初学者项目,我想我会使用pytube制作一个YouTube下载器,让您选择是下载最高质量的视频还是仅将其音频以.mp3格式下载。

好吧,我坚持最后一部分:将扩展名更改为.mp3。

我想要一个简单而优雅的解决方案,我可以理解,但会有所帮助。

我尝试使用os.rename(),但不确定如何使其工作。

hello
4

编辑:

昨天我尝试时它只是挂在了最后一部分,但是我又尝试了一段时间,然后收到了以下错误消息:

from pytube import YouTube
import os

yt = YouTube(str(input("Enter the URL of the video you want to download: \n>> ")))

print("Select download format:")
print("1: Video file with audio (.mp4)")
print("2: Audio only (.mp3)")

media_type = input()

if media_type == "1":
    video = yt.streams.first()

elif media_type == "2":
    video = yt.streams.filter(only_audio = True).first()

else:
    print("Invalid selection.")

print("Enter the destination (leave blank for current directory)")
destination = str(input(">> "))

video.download(output_path = destination)

if media_type == "2":
    os.rename(yt.title + ".mp4", yt.title + ".mp3")

print(yt.title + "\nHas been successfully downloaded.")

文件已下载但未重命名。

最终编辑:(可能)

我终于开始工作了,这主要归功于J_H。感谢您忍受我的无能,您是圣人。 这是最终解决问题的完整代码(以防将来遇到其他任何类似问题的人)

Traceback (most recent call last):
  File "Tubey.py", line 42, in <module>
    os.rename(yt.title + ".mp4", yt.title + ".mp3")
FileNotFoundError: [WinError 2] The system cannot find the file specified: "Cristobal Tapia de veer - DIRK GENTLY's original score sampler - cut 3.mp4" -> "Cristobal Tapia de veer - DIRK GENTLY's original score sampler - cut 3.mp3"

我打算将其变成一个长期项目,并随着我学得越多,用更多功能扩展脚本,但现在我很满意。再次感谢。

1 个答案:

答案 0 :(得分:0)

似乎只有当用户输入以斜杠结尾时,您的代码才能正常工作。

使用os.path.join()组合目标目录和文件名。 使用此表达式可以将当前目录默认为.的空值。

destination = str(input(">> ")) or '.'

编辑:

我希望您的假设(我们可以从标题中预测输出文件规范)是正确的。 但不是。 例如,yt = YouTube('https://www.youtube.com/watch?v=9bZkp7q19f0') 提取标题为'M/V'结尾的PSY音乐视频。 .download()会(相当合理)构造一个仅包含'MV'且没有斜杠的文件名。

您不应该尝试预测输出文件规范。 相反,您应该存储.download()的返回值, 这样一来,您肯定会知道什么是正确的文件规范。 这是将输出重命名为常量文件名的示例:

>>> out_file = yt.streams.first().download()
>>> os.rename(out_file, 'new.mp3')
>>>

或者,如果愿意,可以将其重命名为os.path.join('/tmp', 'new.mp3')

您可能还希望使用splitext解析扩展名:

base, ext = os.path.splitext(out_file)
new_file = base + '.mp3'
os.rename(out_file, new_file)

您可能会发现only_audio标志是减少视频消耗带宽的便捷方法, 如果您只想获取音轨:

yt.streams.filter(only_audio=True).all()