改进以下代码 def write_data_to_excel(self,data, targetfile): workbook = openpyxl.Workbook() try: worksheet = workbook.active for row_data in data: worksheet.append(row_data) workbook.save(targetfile) finally: workbook.close()
时间: 2023-12-25 09:06:50 浏览: 234
可以使用 "with" 语句来替代 "try-finally" 语句,这样可以更简洁地关闭 workbook。同时,可以将 workbook 创建的过程放在 try 语句块中,这样可以在出现异常时及时释放资源。改进后的代码如下:
```
def write_data_to_excel(self, data, targetfile):
workbook = openpyxl.Workbook()
try:
worksheet = workbook.active
for row_data in data:
worksheet.append(row_data)
with open(targetfile, 'wb') as file:
workbook.save(file)
finally:
workbook.close()
```
其中,使用了 "with" 语句来打开文件并保存 workbook,这样可以自动关闭文件。同时,打开文件时使用了二进制模式 "wb",以避免在不同操作系统上出现的换行符问题。
相关问题
优化以下代码 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
```
这样可以提升代码的执行效率和可读性。
优化以下代码 with openpyxl.Workbook() as workbook: worksheet = workbook.active for row_data in data: worksheet.append(row_data) workbook.save(targetfile) print("data is done")
可以考虑将写入操作放到一个函数中,同时在函数内部使用 with 语句自动管理资源,代码如下:
```
import openpyxl
def write_data_to_excel(data, targetfile):
with openpyxl.Workbook() as workbook:
worksheet = workbook.active
for row_data in data:
worksheet.append(row_data)
workbook.save(targetfile)
if __name__ == '__main__':
data = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
targetfile = 'output.xlsx'
write_data_to_excel(data, targetfile)
print("data is done")
```
这样做可以提高代码的可读性和可维护性,同时也保证了资源的正确释放。
阅读全文