# -*- coding:utf-8 _*-

"""

@author:Administrator

@file: excel.py

Description :

如果行数是1000的倍数,进行一次flush,如果行数超过65536,

新开一个sheet,如果超过3个sheet,则新建一个文件

@time: 2018/10/31

"""

import os

import xlwt

from xlrd import open_workbook

from xlutils.copy import copy

from configs.config import ConfigENum

MAX_ROW_NUM = 65536

MAX_SHEET_NUM = 3

class XLS:

def __init__(self, name, captionlist: list, typelist: list, encoding='utf8', flushBound=1000):

"""

:type captionlist: list

:type typelist: list

"""

self.name = name

self.captionlist = captionlist[:]

self.typeList = typelist[:]

self.encoding = encoding

self.flushBound = flushBound

self.bk = xlwt.Workbook(encoding=self.encoding, style_compression=0)

self.workbookIndex = 1

self.row = 0

self.excel_name = None

self.sheet = None

self.sheetindex = 0

# self._add_sheet()

def _add_sheet(self):

if self.sheetindex != 0:

# This method is used to save the Workbook to a file in native Excel format.

self.bk.save(self.name + str(self.sheetindex) + ".xls")

# create new workbook

if self.sheetindex > MAX_SHEET_NUM:

self.workbookIndex += 1

self.bk = xlwt.Workbook(encoding=self.encoding, style_compression=0)

self.sheetindex = 1

# a new sheet

index=self.sheetindex

print("self.sheet_index=",index)

self.sheet = self.bk.add_sheet(self.name +

index.__str__(),

cell_overwrite_ok=False)

for i in range(len(self.captionlist)):

# This method is used to write a cell to a :class:`Worksheet`

self.sheet.write(0, i, self.captionlist[i])

self.row = 1

def write(self, data: list):

"""

:type data: list

"""

# The row of current sheet > the max rows of sheet then create a new sheet

if self.row > MAX_ROW_NUM:

self.sheetindex += 1

self._add_sheet()

self._add_sheet()

for i in data:

for j in range(len(i)):

if self.typeList[j] == "num":

try:

self.sheet.write(self.row, j, float(i[j]))

except:

raise ValueError("{} is not a number".format(i[j]))

else:

self.sheet.write(self.row, j, i[j])

# when rows =1000 then flush rows

if self.row % self.flushBound == 0:

self.sheet.flush_row_data()

self.row += 1

@staticmethod

def __find_file(keyword):

for root, d, files in os.walk(ConfigENum.DATA_PATH.value):

for file in files:

if keyword in file:

file = os.path.join(root, file)

return file

return False

def add_write(self, datas):

result=self.__find_file(self.name)

if not result:

self.write(datas)

self.save()

return "ok"

if self.row > MAX_ROW_NUM:

self.sheetindex += 1

self._add_sheet()

# read a excel file

self.bk = open_workbook(result)

# get the rows of sheet

rows = self.bk.sheets()[self.sheetindex].nrows

# Copy an :class:`xlrd.Book` into an :class:`xlwt.Workbook`

excel = copy(self.bk)

self.sheet = excel.get_sheet(self.sheetindex)

self.row = rows

for data in datas:

# [1,2,3,4]

for j in range(len(data)):

self.sheet.write(self.row, j, data[j]) # xlwt对象的写方法,参数分别是行、列、值

if self.row % self.flushBound == 0:

self.sheet.flush_row_data()

self.row += 1

self.excel_name = os.path.join(ConfigENum.DATA_PATH.value,

self.name + self.workbookIndex.__str__() + ".xls")

excel.save(self.excel_name)

def save(self):

self.excel_name = os.path.join(ConfigENum.DATA_PATH.value,

self.name + self.workbookIndex.__str__() + ".xls")

self.bk.save(self.excel_name)

# if __name__ == "__main__":

# caption_list = ["name", "gender", "age"]

# type_list = ["str", "str", "num"]

# input_data = ["Lili", "M", 25]

# excl=XLS("test",caption_list,type_list)

# excl.write(input_data)

# excl.save()

python excel写入加前缀_python excel写入及追加写入相关推荐

  1. python怎么添加csv模式_python对csv文件追加写入列的方法

    python对csv文件追加写入列,具体内容如下所示: 原始数据 [外链图片转存失败(img-zQSQWAyQ-1563597916666)(C:\Users\innduce\AppData\Roam ...

  2. python对excel操作简书_python Excel 写

    1.优点 一.功能比较强 相对而言,这是除Excel自身之外功能最强的工具了.比如我就用到了它提供的:字体设置.前景色背景色.border设置.视图缩放(zoom).单元格合并.autofilter. ...

  3. python写excel文件不覆盖_python excel多sheet存储,同sheet不覆盖追加数据

    1.多sheet存储 方式一:读取数据库并存入excel多个sheet import cx_Oracle import pandas as pd conn_oracle = cx_Oracle.con ...

  4. python写入mysql数据库_python调用http接口,数据写入mysql数据库并下载录音文件

    写个脚本一共完成了三件事: 第一,python调用http接口, 第二,把调用到的数据写入mysql数据库, 第三,python调用wsdl接口,获取录音文件, import time import ...

  5. python将结果写入txt文件_python(如何将数据写入本地txt文本文件)

    一.读写txt文件 1.打开txt文件 file_handle=open('1.txt',mode='w') 上述函数参数有(1.文件名,mode模式) mode模式有以下几种: #w 只能操作写入 ...

  6. python输出中文加数字_python处理“#”开头加数字的html字符方法

    python如何处理""开头加数字的html字符,比如:风水这类数据. 用python抓取数据时,有时会遇到想要数据是以""开头加数字的字符,比如图中所示的这些 ...

  7. python dialect='excel'是什么意思_python excel自动化写入大数据量数据

    我们在做测试过程中,很多时候需要用到数据,例如我们要给excel中写入100万数据,首先大家想到的是我用python的xlrd直接写就好了,但是我们在运行时会发现: File "C:\Use ...

  8. python爬取mysql数据_Python爬取数据并写入MySQL数据库的实例

    Python爬取数据并写入MySQL数据库的实例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python爬取数据并写入MySQL数据库的实例.txt ] (友 ...

  9. python excel数据处理 空格替换_Python/Excel/SPSS/SQL数据处理方法比较之5 - 空格清理...

    我说的空格清理,是存在于字符串前后(以及中间)的空格. 做过数据清洗才知道空格有多么恶心(平静脸 Python 1.左右两侧空格 如果不使用包,则对于一个字符串左右两边的空格,可以使用字符串函数str ...

最新文章

  1. linux服务器没网情况下手动安装软件几个方法
  2. Spring Boot 热部署入门
  3. (一)MySQL优化之索引优化
  4. (Java 多线程系列)java synchronized详解
  5. Pytorch——DataLoader(批训练)
  6. 【线段树求逆序数】【HDU1394】Minimum Inversion Number
  7. mongoVue破解版
  8. 基于matlab的直流调速仿真系统代码,基于Matlab的双闭环直流调速系统仿真研究毕业设计论文...
  9. 奶头乐理论和二八定律和马太效应
  10. android 打开微信代码,3个超实用的微信隐藏代码,仅限安卓
  11. SpringBoot 整合 ElasticSearch 实现京东搜索(手把手带你完成一个 “前后端分离项目”)
  12. 字体/字库: [ 下载 ] > freetype sdl sdl_ttf
  13. 蓝奏云软件库源码分享下载(后端源码)
  14. 【TVM 巡礼】How to optimize cpu(x86) gemm串讲
  15. sql 凭证明细表 科目余额表_金碟财务软件手册——明细账 凭证汇总表 科目余额表...
  16. Java中hasNext()的作用
  17. MapBoxMap 之 定位
  18. docker基本知识和部署在centos系统
  19. 宇宙代码与磁子计算机,新认识!宇宙产生什么最强磁铁?比人类产生的最强磁场强一亿倍...
  20. 【C 语言】结构体 ( 结构体作为函数参数 | 结构体指针作为函数参数 )

热门文章

  1. 记录一个非常DT的经历——金山毒霸导致IDEA异常:java: 找不到符号符号:类 xxx位置:程序包 xxx.xxx程序包xxx不存在
  2. 8款样式新颖的jQueryCSS3网页菜单
  3. ListView事件的研究
  4. 使用计算机可以代替手工,【多选题】会计核算软件的功能主要偏重于用计算机来替代手工记账,一般不包括(  )等功能。...
  5. activiti动态办理人_Activiti动态设置办理人扩展
  6. C语言-----石头剪刀布小游戏
  7. 桶排序算法——C++
  8. JAVA王大师-易经风水布局秘笈
  9. 重庆高二女生发明考场神器:作弊一秒被逮_cnBeta 人物_cnBeta.COM
  10. 互联网金融神话 余额宝破1853亿的背后