优化以下代码 time_date = datetime.now().strftime('%Y%m%d') targetfile = 'bugzilla{}.xlsx'.format(time_date) if not os.path.isfile(targetfile): start.write_excel(targetfile) # 写入Excel文件 workbook = xlsxwriter.Workbook(targetfile) worksheet = workbook.add_worksheet() for row_num, row_data in enumerate(comment_id): for col_num, col_data in enumerate(row_data): worksheet.write(row_num + 1, col_num + 1, col_data)
时间: 2024-03-05 13:47:35 浏览: 116
可以进行以下优化:
1. 将`datetime.now().strftime('%Y%m%d')`提取出来,避免在后面重复调用。
2. 将创建Excel文件和写入数据合并为一个步骤,避免重复打开和关闭文件。
3. 使用`enumerate()`的`start`参数指定起始行数,避免在循环内部进行加法操作。
优化后的代码如下:
```
import os
import xlsxwriter
from datetime import datetime
time_date = datetime.now().strftime('%Y%m%d')
targetfile = f'bugzilla{time_date}.xlsx'
if not os.path.isfile(targetfile):
start.write_excel(targetfile)
# 写入Excel文件
with xlsxwriter.Workbook(targetfile) as workbook:
worksheet = workbook.add_worksheet()
for row_num, row_data in enumerate(comment_id, start=1):
for col_num, col_data in enumerate(row_data, start=1):
worksheet.write(row_num, col_num, col_data)
```
相关问题
def refresh_labels(self): data4 = self.la if not data4.endswith('.xlsx'): data4 += '.xlsx' wo = pinjie 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)
这段代码看起来像是Python中处理Excel文件的代码,可以看到它使用了openpyxl库。它的功能是读取一个Excel文件,并对其中的数据进行筛选和过滤,只返回符合特定时间范围的行。具体来说,它首先检查文件是否存在,如果不存在则创建一个新的Excel文件。然后对于每个sheet,它会检查第一行第一列的值来确定当前的日期,然后检查每行的日期和sheet名称是否匹配,并且时间是否在特定范围内。如果符合条件,就将该行添加到筛选结果中,并返回最终的结果。
filepath = r"C:\Users\a0005921\Desktop\各分段比重.xlsx" wb = openpyxl.load_workbook(filepath,data_only=True) # TEST_DATA = [{ 'label': '项目调研', 'start':'2019-02-01 12:00:00', 'end': '2019-03-15 18:00:00'}] Stname = wb["统计"] TEST_DATA = [] for rowdata in Stname.iter_rows(min_row=2,max_row=Stname.max_row,min_col=0,max_col=Stname.max_column): # print(rowdata[6].value) if rowdata[6].value == None: continue else: start_date = datetime.strftime(rowdata[5].value,"%Y-%m-%d") end_date = datetime.strftime(rowdata[6].value,"%Y-%m-%d") actual_s_date = datetime.strftime(rowdata[9].value,"%Y-%m-%d") actual_e_date = datetime.strftime(rowdata[10].value,"%Y-%m-%d") dict = {'分段':rowdata[1].value, 'start':start_date, 'end':end_date, 'actual_s':actual_s_date, 'actual_e':actual_e_date,} TEST_DATA.append(dict)优化这段代码
可以对代码进行如下的优化:
1. 使用 pathlib 模块来更好地处理文件路径,避免使用转义字符;
2. 删除无用的注释和空行,使代码更加简洁;
3. 将日期转换代码的部分提取出来,避免重复代码;
4. 将字典 key 的命名规范化。
改写后的代码如下:
```python
from pathlib import Path
import openpyxl
from datetime import datetime
file_path = Path(r"C:\Users\a0005921\Desktop\各分段比重.xlsx")
workbook = openpyxl.load_workbook(file_path, data_only=True)
sheet = workbook["统计"]
TEST_DATA = []
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=0, max_col=sheet.max_column):
if row[6].value is None:
continue
else:
start_date = datetime.strftime(row[5].value, "%Y-%m-%d")
end_date = datetime.strftime(row[6].value, "%Y-%m-%d")
actual_s_date = datetime.strftime(row[9].value, "%Y-%m-%d")
actual_e_date = datetime.strftime(row[10].value, "%Y-%m-%d")
data_dict = {
'segment': row[1].value,
'start_date': start_date,
'end_date': end_date,
'actual_start_date': actual_s_date,
'actual_end_date': actual_e_date
}
TEST_DATA.append(data_dict)
```
阅读全文