我無法理解為什么我的代碼沒有按預期作業。當我第一次啟動我的程式時,我想選擇兩個資料集的路徑。
#進口
import tkinter as tk
import pandas as pd
from configparser import ConfigParser
from tkinter import filedialog
from tkinter.messagebox import showerror, showinfo
#更新dataset1路徑的函式
def load_dataset1_directory():
load_dataset1_dir= filedialog.askdirectory()
parser = ConfigParser()
parser.read("config.ini")
parser.set("path", "load_dataset1_path", load_dataset1_dir)
with open("config.ini","w") as configfile:
parser.write(configfile)
#更新dataset2路徑的函式
def load_dataset2_directory():
load_dataset2_dir= filedialog.askdirectory()
parser = ConfigParser()
parser.read("config.ini")
parser.set("path", "load_dataset2_path", load_dataset2_dir)
with open("config.ini","w") as configfile:
parser.write(configfile)
#讀取組態檔
try:
parser = ConfigParser()
parser.read("config.ini")
saved_load_dataset1_path = parser.get("path", "load_dataset1_path")
saved_load_dataset2_path = parser.get("path", "load_dataset2_path")
except:
showerror(
title='Error',
message='Error 0: Configuration File not found')
#根視窗
root = tk.Tk()
root.geometry("800x500")
root.resizable(True, True)
root.title('Prg1')
#嘗試獲取資料集
try:
df_1 = pd.read_excel(saved_load_dataset1_path "/data1.xlsx")
df_2 = pd.read_excel(saved_load_dataset2_path "/data2.xlsx")
except:
showerror(
title='Error',
message='Error 1: Data not found')
showinfo(
title='Select Data',
message='Select Dataset1')
load_dataset1_directory()
showinfo(
title='Select Data',
message='Select Dataset2')
load_dataset2_directory()
saved_load_dataset1_path = parser.get("path", "load_dataset1_path")
saved_load_dataset2_path = parser.get("path", "load_dataset2_path")
df_1 = pd.read_excel(saved_load_dataset1_path "/data1.xlsx")
df_2 = pd.read_excel(saved_load_dataset2_path "/data2.xlsx")
root.mainloop()
使用以下 confing.ini 首次運行代碼
[path]
load_dataset1_path = dummy
load_dataset2_path = dummy
回傳錯誤:
FileNotFoundError:[Errno 2] 沒有這樣的檔案或目錄:'dummy/dataset1.xlsx'
出錯后就關機了。
如果我再次運行代碼,一切都會按預期作業,沒有任何例外。.ini 檔案具有每個資料集的正確路徑。為什么我第一次運行代碼時 .ini 檔案沒有更新?為什么它保留每條路徑的舊值?
uj5u.com熱心網友回復:
請注意,您parser在以下代碼中使用了在更新組態檔之前加載的,因此設定仍然是舊的:
try:
parser = ConfigParser()
parser.read("config.ini")
saved_load_dataset1_path = parser.get("path", "load_dataset1_path")
saved_load_dataset2_path = parser.get("path", "load_dataset2_path")
except:
showerror(
title='Error',
message='Error 0: Configuration File not found')
...
try:
df_1 = pd.read_excel(saved_load_dataset1_path "/data1.xlsx")
df_2 = pd.read_excel(saved_load_dataset2_path "/data2.xlsx")
except:
showerror(
title='Error',
message='Error 1: Data not found')
showinfo(
title='Select Data',
message='Select Dataset1')
load_dataset1_directory()
showinfo(
title='Select Data',
message='Select Dataset2')
load_dataset2_directory()
# parser is the already loaded one in the above try/except block which contains the old content of the configuration file
saved_load_dataset1_path = parser.get("path", "load_dataset1_path") # get 'dummy'
saved_load_dataset2_path = parser.get("path", "load_dataset2_path") # get 'dummy'
df_1 = pd.read_excel(saved_load_dataset1_path "/data1.xlsx")
df_2 = pd.read_excel(saved_load_dataset2_path "/data2.xlsx")
我建議在load_dataset1_directory()和中回傳選定的檔案夾load_dataset2_directory():
def load_dataset1_directory():
load_dataset1_dir= filedialog.askdirectory()
parser = ConfigParser()
parser.read("config.ini")
parser.set("path", "load_dataset1_path", load_dataset1_dir)
with open("config.ini","w") as configfile:
parser.write(configfile)
return load_dataset1_dir
def load_dataset2_directory():
load_dataset2_dir= filedialog.askdirectory()
parser = ConfigParser()
parser.read("config.ini")
parser.set("path", "load_dataset2_path", load_dataset2_dir)
with open("config.ini","w") as configfile:
parser.write(configfile)
return load_dataset2_dir
然后通過上述兩個函式的回傳值更新這兩個變數:
try:
df_1 = pd.read_excel(load_dataset1_path "/data1.xlsx")
df_2 = pd.read_excel(load_dataset2_path "/data2.xlsx")
except:
showerror(
title='Error',
message='Error 1: Data not found')
showinfo(
title='Select Data',
message='Select Dataset1')
saved_load_dataset1_path = load_dataset1_directory()
showinfo(
title='Select Data',
message='Select Dataset2')
saved_load_dataset2_path = load_dataset2_directory()
#saved_load_dataset1_path = parser.get("path", "load_dataset1_path")
#saved_load_dataset2_path = parser.get("path", "load_dataset2_path")
df_1 = pd.read_excel(saved_load_dataset1_path "/data1.xlsx")
df_2 = pd.read_excel(saved_load_dataset2_path "/data2.xlsx")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443943.html
標籤:Python tkinter 初始化 尝试除外 配置解析器
上一篇:通過命令制作時,如何更改按鈕列?
