python-3.x - 写入 excel - Python
问题描述
我是新手,我会感谢我的代码的一些帮助。我已经写了这个函数:
def write_captions_to_excel_file(self, filenames, titles, indexs, description_path):
print('writing to excel')
workbook = Workbook(os.path.join(description_path, 'all_captions.xlsx'))
worksheet = workbook.add_worksheet()
firstrow = 0
worksheet.write(firstrow, 0, 'Image name') # 3 --> row number, column number, value
worksheet.write(firstrow, 1, 'Titles')
worksheet.write(firstrow, 2, 'Description')
row = indexs + 1
worksheet.write(row, 0, filenames)
origin_title = titles.h1.getText()
worksheet.write(row, 1, origin_title.capitalize())
print(origin_title.capitalize())
worksheet.write(row, 2, '')
sleep(3)
workbook.close()
问题是我多次调用该函数,第一次给我第 0 行和第 1 行的结果,然后当它再次运行时,它给我第 0 行和第 2 行的结果,第 1 行结果已被删除。别人的电话也一样。
我认为每次我调用它从工作簿开始创建的函数时,我都会丢失以前的数据。如何避免这种情况?
正如我在文档中看到的那样,XlsxWriter 仅设计为文件编写器。它无法读取或修改现有的 Excel 文件。
谢谢
解决方案
欢迎来到 SO!
你说的对。您不能使用 xlsx 编写器附加数据。但是你可以修改你的代码来做你想做的事情。
我的建议是,与其多次调用该函数,不如将数据存储在一个数组中并将列表传递给函数并迭代该列表以一次性写入整个文档。这种方式在时间上是经济的,它会给你更多的可读性。
示例代码将像,
import os
import xlsxwriter
def write_captions_to_excel_file(data_list, description_path, headers):
workbook = xlsxwriter.Workbook(os.path.join(description_path, 'all_captions.xlsx'))
worksheet = workbook.add_worksheet()
for row, data in enumerate(data_list):
for col, header in enumerate(headers):
if header == 'Titles':
text_to_write = data[header]
else:
text_to_write = data[header].h1.getText().capitalize()
worksheet.write(row+1, col, text_to_write)
def some_function():
headers = ['Image name', 'Titles', 'Description']
description_path = 'some/path/to/file'
filenames = ['x', 'y', 'z']
titles = ['z', 'y', 'x']
data_list = []
for i, j in enumerate(filenames):
combined_dict = dict()
combined_dict['Image name'] = j
combined_dict['Titles'] = titles[i]
data_list.append(combined_dict)
write_captions_to_excel_file(data_list, description_path, headers)
希望这可以帮助!随时对任何澄清发表评论。
干杯!
推荐阅读
- javascript - “未定义”作为数组的输出
- go - Route53:按 RecordType 过滤 ListResourceRecordSets
- android - TextView onClickListener 无法识别点击
- r - Rshiny ConditionalPanel 显示两个条件
- java - 如何处理运动流记录?(多处理器)
- html - 如何将 1 个渐变变成多个元素
- ruby-on-rails - 条纹支付错误:必须提供来源或客户
- xamarin.forms - Xamarin.Forms Grid Column 的宽度没有填满整个单元格
- tensorflow - 模型不学习
- xaml - 是否可以访问 XAML 中自定义控件的内部控件?