微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

下载文件时无法重命名文件

如何解决下载文件时无法重命名文件

下面是我下载 YouTube 视频然后将其转换为音频文件代码。但是在重命名它时,我收到一个错误。请解释我的问题,并为我提供解决方案。

import os
import tkinter as tk
from tkinter import ttk
from pytube import YouTube
from tkinter.filedialog import askdirectory
from tkinter.messageBox import askyesno,showinfo

这个函数在我使用它重命名我的文件时给我带来了问题。

def rename_file(file):
    def return_val():
        print(new_name.get())
        top.destroy()
        return(new_name.get())

    print(file)
    top = tk.Toplevel(root)
    top.title("Rename File")
    top.iconbitmap('icon.ico')
    top.geometry('400x130')

    tk.Label(top,text='Enter new name for the file: ',font='comicsansms 12').grid(row=0,column=0)
    new_name=tk.StringVar()
    new_name.set(file)

    name_entry = ttk.Entry(top,textvariable=new_name,font='comicsansns 12')
    name_entry.focus_force()
    name_entry.grid(row=0,column=1,pady=5)
    
    ttk.Button(top,text='Rename!',command=return_val,width=8).grid(row=3,pady=18,ipady=9)

这是从 YouTube 下载视频的主要功能

def download_audio():
        try:
            global link_var
            global directory
    
            link = link_var.get() 
    
            yt = YouTube(link)
            title_lable = ttk.Label(root,text=f"Title: {yt.title}",font='lucida 12')
            title_lable.grid(row=3,column=0,pady=9,padx=4)
    
            confirmation = askyesno('Check Title',"Does the title match the video you wanna download?")
    
            if confirmation:
                video = yt.streams.filter(only_audio=True).first()
                video_file = video.download(output_path=directory)
                
                base,ext = os.path.splitext(video_file)
                audio_file = base + '.mp3'
    
                rename = askyesno('Rename File','Do you want to rename this file?')
                if rename:                 

在这函数结束之前,

                   obj = rename_file(audio_file.split('\\')[-1])
                

它前进到下一行。

                   audio_file = os.path.join(directory,obj)
                   print(audio_file)
    
                os.rename(video_file,audio_file)
                showinfo("Downloaded","Your Audio file is downloaded")
    
                link_var.set("")
                title_lable.config(text="")

错误

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\python37-32\lib\tkinter\__init__.py",line 1705,in __call__
    return self.func(*args)
  File "f:\Eriq\PYTHON\YT to Mp3 Converter\yttomp3.py",line 53,in download_audio
    audio_file = os.path.join(directory,obj)
  File "C:\Users\user\AppData\Local\Programs\Python\python37-32\lib\ntpath.py",line 115,in join
    genericpath._check_arg_types('join',path,*paths)
  File "C:\Users\user\AppData\Local\Programs\Python\python37-32\lib\genericpath.py",line 149,in _check_arg_types
    (funcname,s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes,not 'nonetype'

解决方法

你应该让 rename_file() 表现得像一个模态对话框:

def rename_file(file):
    def return_val():
        print(new_name.get())
        top.destroy()
        # return statement here is useless

    print(file)
    top = tk.Toplevel(root)
    top.title("Rename File")
    top.iconbitmap('icon.ico')
    top.geometry('400x130')

    tk.Label(top,text='Enter new name for the file: ',font='comicsansms 12').grid(row=0,column=0)
    new_name=tk.StringVar()
    new_name.set(file)

    name_entry = tk.Entry(top,textvariable=new_name,font='comicsansns 12')
    name_entry.focus_force()
    name_entry.grid(row=0,column=1,pady=5)

    tk.Button(top,text='Rename!',command=return_val,width=8).grid(row=3,pady=18,ipady=9)

    root.wait_window(top) # wait for the window to close
    return new_name.get() # return the name entered

还建议在以下行中使用 os.path.basename() 而不是 split()

obj = rename_file(audio_file.split('\\')[-1])

因此将上面的行更改为:

obj = rename_file(os.path.basename(audio_file))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?