【问题标题】:Don't allow the user to create a folder if it's already exists using os module如果文件夹已经存在,则不允许用户使用 os 模块创建文件夹
【发布时间】:2019-09-15 15:24:44
【问题描述】:

我正在尝试制作一个添加课程表单,其中管理员将在文本框中写入课程名称,然后将创建该名称的文件夹。但是如果课程已经存在,那么它会发送一条错误消息,例如“课程已经存在” 。这是我尝试过的

string=tk.StringVar()
label1=tk.Label(frame,text="Enter Course Name:",font=20,bg="#33BEFF")
label1.place(relx=0.25,rely=0.27)
coursetxt=ttk.Entry(frame,textvariable=string,text="")
coursetxt.place(relx=0.52,rely=0.27)

def addcourse():
    name=coursetxt.get()
    conn = pyodbc.connect('Driver={SQL Server};''Server=SHUMAILA\SHUM;''Database=FYP;''Trusted_Connection=yes;')
    cursor=conn.cursor()
    cursor.execute('insert into course(cname)values(?)',(name))
    courses_f=os.chdir('G:\Shumaila\FYP\FYP\courses')  #path where course folder are saved
    course_folder=os.mkdir(name)  #for creating course folder
    if course_folder.path.exists in courses_f:
        messagebox.showinfo("Message","Course is already exist")
    else:
        messagebox.showinfo("Message","Course is added")
        course_folder=os.mkdir(name)


addbutton=tk.Button(frame,text="Add",bg='#FF6E33',command=addcourse)
addbutton['font']=myFont
addbutton.place(relx=0.40,rely=0.35,relwidth=0.20,relheight=0.10)

运行代码后出现此错误

FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'E1'
where E1 is the name of course I entered in textbox

我希望这条消息将打印在消息框中。

我也尝试过,但它也不起作用

     if name in os.chdir('G:\Shumaila\FYP\FYP\courses'):
        messagebox.showinfo("Message","Course is already exist")
     else:
        os.mkdir(name)
        messagebox.showinfo("Message","Course is added")

【问题讨论】:

    标签: python user-interface module duplicates operating-system


    【解决方案1】:

    我们来谈谈os.mkdir()

    mkdir 使用给定路径创建一个目录。如果路径是相对的,它将相对于当前工作目录创建它。我会避免这种情况,并使用完整路径。

    (为什么?因为当前工作目录是全局的,更改它可能会影响代码的其他部分。)

    mkdiralways 返回无。

    所以,当您致电 course_folder=os.mkdir(name) 时,您只是将 course_folder 设置为 None。

    当您引用不存在的course_folder.path 时。


    我们来谈谈os.chdir()

    chdir 更改当前工作目录。

    当前工作目录仅在您使用相对路径时才相关。您可能应该只使用完整路径,并且永远不要更改它。

    chdiralways 返回无。

    因此,当您设置courses_f=os.chdir([whatever]) 时,您将courses_f 设置为无。

    同样,当您检查 name in os.chdir([whatever]) 时,您只是在检查 name in None


    你应该怎么解决?

    您可以使用os.path.exists() 来检查是否已经存在具有该名称的(文件夹或文件),之前调用os.mkdir()

    这可能存在竞争条件(其他人可以在两次调用之间创建文件),因此更好的方法可能是尝试创建它,并在失败时捕获异常。

    【讨论】:

    • 非常感谢!我试过了,它工作正常。我发布了您可以检查的代码
    【解决方案2】:

    这是我所做的,它正在工作。

    def addcourse():
        name=coursetxt.get()
        conn = pyodbc.connect('Driver={SQL Server};''Server=SHUMAILA\SHUM;''Database=FYP;''Trusted_Connection=yes;')
        cursor=conn.cursor()
        cursor.execute('insert into course(cname)values(?)',(name))
        os.chdir
        if os.path.exists(name):
            messagebox.showinfo("Message","Course is already exist")
        else:
            messagebox.showinfo("Message","Course is added")
            os.mkdir(name) 
    

    【讨论】:

    • os.chdir 什么都不做。 (没有参数。)我不知道name 是完整路径还是相对路径。如果它是相对的,则该目录将在当前工作目录所在的位置创建。
    猜你喜欢
    • 2021-08-15
    • 2013-06-24
    • 2011-01-19
    • 1970-01-01
    • 2018-02-10
    • 2013-09-18
    • 2011-02-19
    • 2013-01-17
    相关资源
    最近更新 更多