python - 如何编辑json文件中的列表并将其保存在python中
问题描述
我想制作列表以删除path_choosed = StringVar()
. 然后将列表转储到 json 文件中。但是当我尝试使用remove()
功能时。我像这样清除它:
前:
["item1",'item2',"item3"]
之后:(它清除文件)
import shutil,os,json,sys
from tkinter import *
from tkinter import filedialog,font as tkfont, messagebox as m_box
rf = open('path.json','r')
fd = json.load(rf)
path_list = fd.copy()
path_list_copy = path_list.copy()
rf.close()
selectedPath = ""
def browse_func(x,y):
global selectedPath
try:
selectedPath = filedialog.askdirectory()
x.configure(text=selectedPath)
y.focus_force()
except Exception as f:
m_box.showerror('An Error Occured',f)
def add_func():
global selectedPath,xyz
try:
if selectedPath:
wf = open('path.json','w')
path_list.append(selectedPath)
json.dump(path_list,wf)
restart()
elif selectedPath == "":
m_box.showerror("Writing ERROR",'Please type something')
except Exception as w:
m_box.showerror('An Error Occured',w)
def add_path_win_func():
add_win = Toplevel()
add_win.overrideredirect(True)
add_win.focus_force()
add_win.title("Add More Paths")
add_win.iconbitmap(None)
lbl1= Label(add_win,text="Choose path To be Add in the list",font=("helvatica",15))
lbl2=Label(add_win,bg="dark grey",text="",font=("helvatica",14))
brws_btn = Button(add_win,text='Browse...',font=helv20,command=lambda:browse_func(lbl2,add_win))
add_btn = Button(add_win,text="Add",command=add_func,font=("helvatica",16))
Cancel_btn = Button(add_win,text="Cancel",command=lambda:add_win.destroy(),font=("helvatica",16))
lbl1.grid(row=0,column=0,padx=8,pady=8)
lbl2.grid(row=1,column=0,pady=8)
brws_btn.grid(row=1,column=1,pady=8)
add_btn.grid(row=2,column=0,pady=18,padx=18)
Cancel_btn.grid(row=2,column=1,pady=18,padx=18)
add_win.mainloop()
def restart():
os.startfile('backup.py')
sys.exit()
def backup_func():
global src_choosed,dest_choosed
src = src_choosed.get()
dest = dest_choosed.get()
try:
folder = os.path.basename(src)
new_dest = str(f"{dest}/{folder}")
if os.path.exists(new_dest):
shutil.rmtree(new_dest)
else:
None
shutil.copytree(src,new_dest)
except Exception as e:
m_box.showerror("An ERROR Occured",e)
def remove_win():
def remove():
try:
wf = open("path.json","w")
selecItem = path_choosed.get()
if selecItem=="Select Path":
m_box.showerror("Can't Remove","You Can Not Remove\nThis")
elif selecItem == "":
m_box.showerror("Type ERROR","Please Choose Something")
elif selectedPath:
path_list_copy.remove(path_choosed.get())
json.dump(path_list_copy,wf)
wf.close()
restart()
except Exception as e:
m_box.showerror("An ERROR Occured",e)
remo_win = Toplevel()
remo_win.overrideredirect(True)
remo_win.focus_force()
remo_win.title("Add More Paths")
remo_win.iconbitmap(None)
lbl1= Label(remo_win,text="Choose path To be Removed in the list",font=("helvatica",15))
path_choosed = StringVar()
path_choosed.set(path_list[0])
Paths = OptionMenu(remo_win,path_choosed,*path_list_copy)
remo_btn = Button(remo_win,text="Remove",command=remove,font=("helvatica",16))
Cancel_btn = Button(remo_win,text="Cancel",command=lambda:remo_win.destroy(),font=("helvatica",16))
lbl1.grid(row=0,column=0,padx=8,pady=8)
Paths.grid(row=1,column=0,sticky="ew")
remo_btn.grid(row=2,column=0,pady=18,padx=18)
Cancel_btn.grid(row=2,column=1,pady=18,padx=18)
remo_win.mainloop()
win = Tk()
win.resizable(0, 0)
win.iconbitmap("icon.ico")
win.title("Backup Manager")
win.rowconfigure(0,weight=1)
win.columnconfigure(0,weight=1)
helv20 = tkfont.Font(family="futora",size=20,weight=tkfont.BOLD)
#=================Backup Screen====================#
backup_screen = Frame(win,bg="#AFE1AF")
bl1 = Label(backup_screen,font=("verdana",20),text="Choose Source To Be Copied")
src_choosed = StringVar()
src_combo = OptionMenu(backup_screen,src_choosed,*path_list)
src_combo.config(font=helv20)
menu_src = win.nametowidget(src_combo.menuname)
menu_src.config(font=helv20)
dest_choosed = StringVar()
try:
dest_choosed.set(path_list[0])
src_choosed.set(path_list[0])
except:
None
bl2 = Label(backup_screen,font=("verdana",20),text="Choose Destination")
dest_combo = OptionMenu(backup_screen,dest_choosed,*path_list)
dest_combo.config(font=helv20)
menu_dest = win.nametowidget(dest_combo.menuname)
menu_dest.config(font=helv20)
backup_btn = Button(backup_screen,command=backup_func,bg="Green",activebackground="red",text="Back up",width=20,font=("Verdana",15))
path_btn = Button(backup_screen,text="Manage Paths",width=20,
font=("Verdana",15),command=lambda:mng_path_screen.tkraise())
bl1.grid(row=0,column=0,pady=4)
src_combo.grid(row=1,column=0,sticky="ew",pady=4)
bl2.grid(row=2,column=0,pady=4)
dest_combo.grid(row=3,column=0,sticky="ew",pady=4)
backup_btn.grid(row=4,column=0,pady=4)
path_btn.grid(row=5,column=0,pady=4)
#==================Manage Path==================#
mng_path_screen = Frame(win,bg="#E4D00A")
path_lst_box = Listbox(mng_path_screen,width=50)
path_lst_box.insert(0,*path_list)
add_path_btn = Button(mng_path_screen,command=add_path_win_func,text="Add Path",font=("verdana",16))
removebutton = Button(mng_path_screen,command=remove_win,text="Remove Path",font=("verdana",16))
go_back_btn = Button(mng_path_screen,text="Go Back",command=lambda:backup_screen.tkraise(),font=("verdana",16))
path_lst_box.grid(row=0,column=0,padx=50, pady=6)
add_path_btn.grid(row=1,column=0)
removebutton.grid(row=2,column=0,sticky="w")
go_back_btn.grid(row=2,column=0,sticky="e")
for frame in (backup_screen,mng_path_screen):
frame.grid(column=0,row=0,sticky="nswe")
backup_screen.tkraise()
win.mainloop()
解决方案
推荐阅读
- delphi - 如何处理 TIdTCPServer 中的超时——IOHandler.ReadTimeout 属性?
- arrays - 解析 JSON 来做数学?
- vbscript - 从图片中获取 TAG 元数据 - 文件夹和子文件夹 - Vbscript
- reactjs - svg 圆圈中的 React-FontAwesome unicode 值
- go - 将 map[string]interface{} 转换为 JSON,将相同的 JSON 转换为 map[string]interface{}(保留 interface{} 类型)
- android-kernel - 硬件/qcom/display-caf/msm8996/sdm/libs/core/drm/hw_info_drm.cpp:559:35:错误:使用未声明的标识符“QCOM”
- javascript - 为什么我的文字没有显示在中心?
- java - 即使在应用约束后如何查看丢失的按钮?
- python - 为什么这个高阶函数在 mypy 中不通过静态类型检查?
- kubernetes - 部署在同一个 kubernetes 命名空间中的 Apache Ignite 节点不加入同一个集群