翼度科技»论坛 编程开发 python 查看内容

Python 基于 xlsxwriter 实现百万数据导出 excel

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
追加导出 + 自动切换 sheet
⚠️ excel 中的每个 sheet 最多只能保存 1048576 行数据
  1. # 获取项目的根路径 rootPath
  2. curPath = os.path.abspath(os.path.dirname(__file__))  
  3. rootPath = curPath[:curPath.find(你的项目名称 + "/") + len(  
  4. 你的项目名称 + "/")]
  5. # 临时文件
  6. local_file_path = os.path.join(rootPath, "temp.xlsx")  
  7. # 检查并删除现有的临时文件  
  8. if os.path.exists(local_file_path):  
  9.     os.remove(local_file_path)
  10.    
  11. sheet_number = 1  
  12. sheet_name_format = "Sheet_{}"
  13. # 数据量大,导出的数据又包含url的话,会疯狂报警告,大家用不到可以删掉
  14. workbook = xlsxwriter.Workbook(local_file_path, options={'strings_to_urls': False})
  15. table = workbook.add_worksheet(sheet_name_format.format(sheet_number))
  16. # sheet 数据总条数
  17. page_total = 0  
  18. # 要写的行
  19. row_number = 1
  20. # 分批导出,每次 100000 条数据
  21. default_limit = 100000
  22. # 分批导出,第 1 页开始
  23. page_number = 1
  24. while True:
  25.         # 分批获取数据
  26.         data_list = get_data_list(page_number, default_limit) # 你的数据
  27.         if len(data_list) == 0:  
  28.                 break  
  29.         # sheet总条数,0代表第一次写入数据
  30.         if page_total == 0:  
  31.                 # 标题
  32.                 header = [你的标题]
  33.                 table.write_row(0, 0, header)
  34.                 # todo 因为我把每个 sheet 控制在了 100万条,就切换下一个 sheet 了。
  35.                 # todo 如果各位要是玩极限别忘了这里 page_total + 1
  36.           
  37.         for item in data_list:  
  38.                 table.write_row(row_number, 0, list(item.values()))  
  39.                 row_number = row_number + 1
  40.           
  41.         page_total = page_total + len(data_list)  
  42.         # 自动切换sheet
  43.         if page_total >= 1000000:  
  44.                 # 换下一个sheet   
  45.                 sheet_number = sheet_number + 1  
  46.                 table = workbook.add_worksheet(sheet_name_format.format(sheet_number))  
  47.                 # 初始化
  48.                 page_total = 0  
  49.                 row_number = 1
  50.         page_number = page_number + 1
  51. # 关闭  
  52. workbook.close()
复制代码
来源:https://www.cnblogs.com/yistack/p/18104628
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具