python 3中非常慢的循环,tkinter

2024-05-09 12:12:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用一个界面编写一些脚本,我遇到了一些性能非常差的问题

我想为每一列(129)创建多个条目,列应该是7。为此,我创建了一个字典,因此使用动态变量名创建了空条目

对于这些空条目,我希望根据特定单元格(国家/地区)中提供的内容插入文本

任务已经完成,但是,加载数据需要花费大量的时间,我不知道可以做些什么来加快加载速度。。我不能让它这么慢,尤其是在项目的这个阶段

从提取文件获取信息的函数:

def Load_Neighborhood_Details(self, inx, what_return):
    file_path = r'C:\Users\krzysztof-wirkus\Desktop\Od nowa\extracts\neighborhood_details.csv'
    file = pd.read_csv(file_path, encoding = "ISO-8859-1")
    
    country = file[file['Country Name'] == self.p0.country_input.get()]
    location = country[country['Location Name'] == self.p0.location_input.get()].iloc[inx]
    
    neighborhood_name = location['Neighborhood Name']
    dwelling = location['Dwelling']
    
    furniture = location['Furnished Unfurnished Indicator']
    item_cost_category = location['Item Cost Category Name']
    neigh_class = location['Class']
    try:
        start_date = location['Start Date'].split()[0]
    except:
        start_date = ""
    try:
        end_date = location['End Date'].split()[0]
    except:
        end_date = ""
    if what_return == "neighborhood_name":
        return neighborhood_name
    elif what_return == "dwelling":
        return dwelling
        
    elif what_return == "furniture":
        return furniture
    elif what_return == "item_cost_category":
        return item_cost_category
    elif what_return == "neigh_class":
        return neigh_class
    elif what_return == "start_date":
        return start_date
    elif what_return == "end_date":
        return end_date

我糟糕的性能循环:

for i in range(2, 131):
        self.p3.dict['neighborhood_details_name_entry_' + str(i)].insert(tk.END, self.Load_Neighborhood_Details(i-2, "neighborhood_name"))
        self.p3.dict['neighborhood_details_dwelling_entry_' + str(i)].insert(tk.END, self.Load_Neighborhood_Details(i-2, "dwelling"))
        self.p3.dict['neighborhood_details_furniture_entry_' + str(i)].insert(tk.END, self.Load_Neighborhood_Details(i-2, "furniture"))
        self.p3.dict['neighborhood_details_item_cost_category_entry_' + str(i)].insert(tk.END, self.Load_Neighborhood_Details(i-2, "item_cost_category"))
        self.p3.dict['neighborhood_details_class_entry_' + str(i)].insert(tk.END, self.Load_Neighborhood_Details(i-2, "neigh_class"))
        self.p3.dict['neighborhood_details_start_date_entry_' + str(i)].insert(tk.END, self.Load_Neighborhood_Details(i-2, "start_date"))
        self.p3.dict['neighborhood_details_end_date_entry_' + str(i)].insert(tk.END, self.Load_Neighborhood_Details(i-2, "end_date"))

Tags: selfdatereturnloadlocationdetailswhatdict
2条回答

我不确定,但问题可能是您继续打开csv文件。 尝试改变

def Load_Neighborhood_Details(self, inx, what_return):
    file_path = r'path/to/file'
    file = pd.read_csv(file_path, encoding = "ISO-8859-1")
    
    country = file[file['Country Name'] == self.p0.country_input.get()]
    [...]

与:

def Load_Neighborhood_Details(self, inx, what_return, file):
    country = file[file['Country Name'] == self.p0.country_input.get()]
    [...]

然后:

file_path = 'path/to/file'
file = pd.read_csv(file_path, encoding = "ISO-8859-1")
for i in range(2, 131):
    self.p3.dict['neighborhood_details_name_entry_' + str(i)].insert(tk.END, self.Load_Neighborhood_Details(i-2, "neighborhood_name", file))
    [...]

(注意传递给函数Load\u neighborary\u Details()的文件对象)

我希望它能帮上忙

您的代码的性能非常差,因为您要多次打开csv文件,您应该只打开一次(如果可能)并将其作为函数的参数传递,这将有助于提高性能

相关问题 更多 >