优化以下代码 workbook = openpyxl.Workbook() worksheet = workbook.active for row_num, row_data in enumerate(comment_id, start=1): for col_num, col_data in enumerate(row_data, start=1): worksheet.cell(row=row_num , column=col_num , value=col_data) workbook.save(targetfile) print("data is done")
时间: 2023-12-26 15:03:15 浏览: 111
可以优化的地方有:
1. 使用 with 语句来自动关闭 workbook,避免文件未关闭的风险;
2. 使用 worksheet.append() 方法来代替双重循环,可以减少代码量和提高效率;
3. 将 print() 函数移到 with 语句块外面,避免在数据处理期间频繁输出。
优化后的代码如下:
```
import openpyxl
comment_id = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
targetfile = "data.xlsx"
with openpyxl.Workbook() as workbook:
worksheet = workbook.active
for row_data in comment_id:
worksheet.append(row_data)
workbook.save(targetfile)
print("data is done")
```
注意:这里的示例代码中,我为了演示方便,将 comment_id 和 targetfile 直接赋值了,实际使用时需要根据实际情况进行修改。
相关问题
优化以下代码 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)
可以进行以下优化:
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 write_data_to_excel(self, data, targetfile): workbook = openpyxl.Workbook() sheet = workbook.active # 指定标题行 sheet.append(["bug_id", "bug_status", "delta_ts","short_desc"]) # 写入数据 for num,row in enumerate(data,start=1): sheet['A{}'.format(num)] = row[0] sheet['B{}'.format(num)] = row[1] sheet['C{}'.format(num)] = row[2] sheet['D{}'.format(num)] = row[3] # 保存工作簿 workbook.save(targetfile) # 关闭工作簿 workbook.close()
可以对这段代码进行如下优化:
1. 使用 `worksheet.cell()` 方法获取单元格对象,然后在单元格对象上设置值,这样比直接使用 `sheet['A{}'.format(num)] = row[0]` 更快。
2. 将 `enumerate()` 函数的 `start` 参数设置为 2,这样就可以从第二行开始写入数据,避免写入标题行时出现重复。
3. 将写入单元格的代码放入一个函数中,这样可以减少重复代码。
下面是优化后的代码:
```
def write_data_to_excel(self, data, targetfile):
workbook = openpyxl.Workbook()
sheet = workbook.active
# 指定标题行
header = ["bug_id", "bug_status", "delta_ts", "short_desc"]
write_row(sheet, header, 1)
# 写入数据
for num, row in enumerate(data, start=2):
write_row(sheet, row, num)
# 保存工作簿
workbook.save(targetfile)
# 关闭工作簿
workbook.close()
def write_row(sheet, row, row_num):
for col_num, value in enumerate(row, start=1):
cell = sheet.cell(row=row_num, column=col_num)
cell.value = value
```
这样可以提升代码的执行效率和可读性。
阅读全文