如果使用os模块已经存在该文件夹,则不允许用户创建该文件夹

时间:2019-09-15 15:24:44

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

我正在尝试添加课程表,管理员将在文本框中输入课程名称,然后将使用该名称创建文件夹。但是,如果课程已存在,则会发送一条错误消息,例如“课程已存在” “。这是我尝试过的

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")

2 个答案:

答案 0 :(得分:0)

让我们谈谈os.mkdir()

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

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

mkdir始终返回无。

因此,如果您叫course_folder=os.mkdir(name),您只是将course_folder设置为None。

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


让我们谈谈os.chdir()

chdir更改当前工作目录。

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

chdir始终返回无。

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

类似地,当您检查是否name in os.chdir([whatever])时,您只是在检查name in None


您应该如何解决?

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

)。

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

答案 1 :(得分:0)

这是我所做的并且正在起作用。

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)