优化代码 self.treeview.delete(*self.treeview.get_children()) self.treeview["columns"] = tuple(df.columns) self.treeview["show"] = "headings" for col in df.columns: self.treeview.heading(col, text=col) for idx, row in df.iterrows(): values = [str(value) for value in row.values.tolist()] self.treeview.insert("", "end", text=str(idx), values=values) except AttributeError: # 如果未选择文件则弹出对话框提示用户选择文件 filedialog.showinfo(title="错误", message="请选择要处理的数据文件")
时间: 2024-02-14 17:06:30 浏览: 71
scituble.zip_188479. com_question1zo_treeview控件
好的,以下是对代码的优化建议:
1. 将删除所有子项的行 `self.treeview.delete(*self.treeview.get_children())` 放到 for 循环之前,避免在每次循环时都执行一次删除操作。
2. 使用 `df.columns.tolist()` 获取列名列表,避免在 for 循环中多次调用 `df.columns`。
3. 将 `df.iterrows()` 替换为 `df.itertuples()`,使用元组形式的行来遍历数据,这样可以获得更好的性能。
4. 将 `str(value)` 替换为 `str(value) if value is not None else ""`,避免空值导致的异常。
5. 将 `AttributeError` 异常改为更具体的异常类型,如 `FileNotFoundError`。
优化后的代码如下:
```python
try:
# 读取数据文件
filename = filedialog.askopenfilename(filetypes=[("CSV Files", "*.csv")])
if filename:
df = pd.read_csv(filename)
# 删除所有子项
self.treeview.delete(*self.treeview.get_children())
# 设置表格列
columns = df.columns.tolist()
self.treeview["columns"] = tuple(columns)
self.treeview["show"] = "headings"
for col in columns:
self.treeview.heading(col, text=col)
# 插入数据行
for row in df.itertuples(index=False):
values = [str(value) if value is not None else "" for value in row]
self.treeview.insert("", "end", values=values)
else:
# 如果未选择文件则弹出对话框提示用户选择文件
filedialog.showinfo(title="错误", message="请选择要处理的数据文件")
except FileNotFoundError:
# 如果文件不存在则弹出对话框提示用户选择正确的文件
filedialog.showinfo(title="错误", message="文件不存在,请选择正确的文件")
```
希望这些建议能帮助您优化代码。
阅读全文