優化這兩段代碼,不要做多餘無用的工作
时间: 2024-03-15 17:44:39 浏览: 10
第一段代码可以优化的部分是在读取Excel文件时,如果文件不存在则创建一个新文件。这个操作可以移动到代码的前面,这样可以避免在每个工作表上遍历时都重新创建一个工作簿。
第二段代码可以优化的部分是在对每个工作表进行遍历时,如果文件不存在则不需要进行遍历操作。可以在检查文件是否存在的时候就进行判断,如果文件不存在,则直接跳过该工作表的遍历。
下面是优化后的代码:
```
# 优化前的第一段代码
def refresh_labels(self):
data4 = self.la
if not data4.endswith('.xlsx'):
data4 += '.xlsx'
wo = pinjie
filepath = os.path.join(wo, data4)
if os.path.exists(filepath):
wb = openpyxl.load_workbook(filepath)
else:
wb = openpyxl.Workbook()
ws = wb.active
wb.save(filepath)
# 优化后的第一段代码
filepath = os.path.join(wo, data4)
if not os.path.exists(filepath):
wb = openpyxl.Workbook()
wb.save(filepath)
else:
wb = openpyxl.load_workbook(filepath)
current_time = datetime.datetime.now().time()
start_time_1 = datetime.time(8, 0, 0) # 早上8点
end_time_1 = datetime.time(20, 0, 0) # 下午7点
start_time_2 = datetime.time(20, 0, 0) # 晚上8点
end_time_2 = datetime.time(7, 0, 0) # 早上7点
for i, sheet_name in enumerate(self.sheet_names):
filtered_rows = []
# 优化第二段代码:检查文件是否存在
filepath = os.path.join(pinjie, self.la + '.xlsx')
if os.path.exists(filepath):
workbook = xl.load_workbook(filepath)
sheet = workbook.active
today = datetime.datetime.now().strftime('%Y/%m/%d')
cell_value = sheet.cell(row=1, column=1).value
if cell_value is not None and cell_value != '':
for row in sheet.iter_rows(min_row=1):
if row[2].value == today and row[8].value == sheet_name:
datetime_obj = datetime.datetime.strptime(row[3].value, '%H:%M:%S')
row_time = datetime_obj.time()
if start_time_1 <= row_time <= end_time_1 and start_time_1 <= current_time <= end_time_1:
filtered_rows.append(row)
elif start_time_2 <= row_time or current_time <= end_time_2:
filtered_rows.append(row)
label = self.unique_listbox.grid_slaves(row=i // 3, column=i % 3)[0]
if filtered_rows:
label.config(text=f"{sheet_name} - 已點檢", fg="green")
else:
label.config(text=f"{sheet_name} - 未點檢", fg="red")
```
优化后的代码可以避免不必要的文件读写操作,提高程序运行效率。