手机

密码

安全问题

注册 忘记密码?

详情请戳:https://www.udongman.cn/index.php?m=product&c=csp ​

有效期:2022/03/03 - 2022/08/30
修约计算、自适应列宽、填写模板
来源: | 作者:wUw | 发布时间: 1096天前 | 2895 次浏览 | 分享到:

本部分主要低啊用的包为decimal,主要起到的作用并非十进制的计算而是保留数字的修约方式,并非保留小数位数,这个其实还是挺重要的,并且可以明确的是,不进行特别设置的话同样采取的是“四舍六入五留双”的机制,做一个如下的实验:

from decimal import Decimal, getcontext  a = Decimal.from_float(0.1) print(a) getcontext().prec = 16 print(a*Decimal.from_float(1)) getcontext().prec = 17 print(a*Decimal.from_float(1)) getcontext().prec = 18 print(a*Decimal.from_float(1))  a = Decimal.from_float(0.1534) print(a) getcontext().prec = 16 print(a*Decimal.from_float(1)) getcontext().prec = 17 print(a*Decimal.from_float(1)) getcontext().prec = 18 print(a*Decimal.from_float(1))  a = Decimal.from_float(0.00001534) print(a) getcontext().prec = 16 print(a*Decimal.from_float(1)) getcontext().prec = 17 print(a*Decimal.from_float(1)) getcontext().prec = 18 print(a*Decimal.from_float(1))
0.1000000000000000055511151231257827021181583404541015625 0.1000000000000000 0.10000000000000001 0.100000000000000006  0.1534000000000000085709217501062084920704364776611328125 0.1534000000000000 0.15340000000000001 0.153400000000000009  0.00001533999999999999881879209073787251327303238213062286376953125 0.00001534000000000000 0.000015339999999999999 0.0000153399999999999988

可以看到,有效位数为16位以内的情况下,使用Decimal.from_float还是可以基本保证精度的,getcontext().prec = 为设置有效数字位数。

其他的进位方式的调整可以看官方文档:

2.2填写模板:

l1 = locals() l1['tpl' + str(h)] = DocxTemplate(varF_2.get())  # 打开模板  # 要插入的图片1路径 image1_path = varF_3.get() # 要插入的图片2路径 image2_path = varF_4.get() # 创建2张图片对象 insert_image1 = InlineImage(l1['tpl' + str(h)], image1_path, width=Mm(30)) insert_image2 = InlineImage(l1['tpl' + str(h)], image2_path, width=Mm(30))  if varF_3.get():     countext = {             'number': paramet0[0][0],             'method': paramet0[0][1],             'name': paramet0[0][2],             'workstd_number': paramet0[0][11],             'sample_weight1': paramet0[0][3],             'sample_weight2': paramet0[0][4],             'zero': paramet0[0][5],             'temperature': paramet0[0][9],             'humidity': paramet0[0][10],             'yyyy': paramet0[0][6],             'mm': paramet0[0][7],             'dd': paramet0[0][8],             'img1': insert_image1,             'img2': insert_image2,     }     # 取出数据组成字典 else:     countext = {             'number': paramet0[0][0],             'method': paramet0[0][1],             'name': paramet0[0][2],             'workstd_number': paramet0[0][11],             'sample_weight1': paramet0[0][3],             'sample_weight2': paramet0[0][4],             'zero': paramet0[0][5],             'temperature': paramet0[0][9],             'humidity': paramet0[0][10],             'yyyy': paramet0[0][6],             'mm': paramet0[0][7],             'dd': paramet0[0][8],     } for qs in range(1, len(paramet0)):     l1['context' + str(qs)] = {             'parameter{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][0]),             'concentration_name{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][1]),             'content_name{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][2]),             'average_name{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][3]),             'revision_name{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][4]),             'RR_name{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][5]),             'concentration1{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][6]),             'concentration2{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][7]),             'content1{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][8]),             'content2{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][9]),             'average{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][10]),             'revision{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][11]),             'RR{b}'.format(b=qs - 1): '{}'.format(paramet0[qs][12]),     }     countext.update(l1['context' + str(qs)])  # 合并字典 print(countext) l1['tpl' + str(h)].render(countext)  # 执行渲染 l1['tpl' + str(h)].save(file_run + '/' + paramet0[0][0] + '.docx')  # 另存  document = Document(file_run + '/' + paramet0[0][0] + '.docx')  # 读入文件 tables = document.tables  # 获取文件中的表格集 table = tables[0]  # 获取文件中的第一个表格 num_sum = [num for num in range(18, len(table.rows) - 3) if not table.cell(num, 1).text]  # 记录空行位置 print(num_sum) # 删除空行↓ for ed in reversed(num_sum):     row = table.rows[ed]     row._element.getparent().remove(row._element) # 删除空行结束↑ document.save(file_run + '/' + paramet0[0][0] + '.docx')
  • 标题
  • 内容
  • 验证码
提交
标题内容提交时间
没有记录!