手机

密码

安全问题

注册 忘记密码?

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

有效期:2022/03/03 - 2022/08/30
修约转换科学计数法及写入word(docx包) python实现
来源: | 作者:wUw | 发布时间: 894天前 | 2376 次浏览 | 分享到:

一、科学计数法及修约:

本部分有误,更新可见:

https://zhuanlan.zhihu.com/p/533637330

源码内已经注释的很清楚了,

import math  # log10及向上修约

x1 = 1000
x2 = 0.0793
y1 = math.log10(x1 * x2)  # log10对于小数等可以明确返回相关数字。
y01 = math.ceil(abs(math.log10(x1 * x2)))  # math.ceil为向上取整得到小数位数。

if y1 > 0:
    # 对于log10正数的情况↓将数字转化为科学计数法,并且执行向上修约
    z1 = x1 * x2 / pow(10, y01-1)#转化为整数位只有1位的数字
    print(z1)
    z2 = "{:.1f}".format(z1)  # 格式化,{:1f},为格式化为小数,保留1位
    print(z2)
    if float(z1) > float(z2):
        #对于修约后进位的情况↓
        if len(str(int(z1 + 0.1))) == 2:
            z01 = "{:.1f}".format((z1 + 0.1) / 10) + "E+" + str(y01)
        else:
            z1 = "{:.1f}".format((float(z2) + 0.1))
            z01 = z1 + 'E+' + str(y01-1)
        #对于进位情况处理结束↑
        else:
            z01 = z2 + 'E+' + str(y01)
            
        else:
            # 对于log10负数的情况↓
            z1 = x1 * x2 * pow(10, y01)
            print(z1)
            z2 = "{:.1f}".format(z1)
            print(z2)
            if float(z1) > float(z2):
                if len(str(int(z1+0.1))) == 2 :
                    z01 = "{:.1f}".format((z1 + 0.1)/10) + "E-" + str(y01-1)
                else:
                    z1 = "{:.1f}".format((float(z2) + 0.1))
                    z01 = z1 + 'E-' + str(y01)
                else:
                    z01 = z2 + 'E-' + str(y01)
                    
                    
print(z01,float(z01))

其中,x1和x2为输入的数字,y1中有x1和x2相乘的计算,这段完全可以改为读取数据计算的形式。

实现的功能是,将计算后的数字修约为只保留一位小数的科学计数法,对于修约后进位做了二次修约,修约采取向上修约,即修约末位后面位数只要存在数字,即+1,放到实例中,即为+0.1。

采取log10的计算判断小数点后0的个数。

代码未涉及负数的情况,需要的时候只需要在z01合成数字时增加“-”即可。

二、对word的操作:

1)写入有内容的表格或者空表格。

                for lol in df:
                    df11 = pd.read_excel(listA[i], sheet_name=lol)  # 按照sheet名读取整个sheet
                    df11 = df11.dropna(axis=1, how="all")  # 按列删除空列,例如表格有11列其中5列没有值,则删除
                    df11 = df11.fillna("")#替换nan
                    tt = document.add_table(df11.shape[0] + 1, df11.shape[1], style="Table Grid")#切片第1行第1列
                    document.add_paragraph(lol + "n")
                    for j in range(df11.shape[-1]):
                        tt.cell(0, j).text = df11.columns[j]
                    # add the rest of the data frame
                    for iq in range(df11.shape[0]):
                        for j in range(df11.shape[-1]):
                            tt.cell(iq + 1, j).text = str(df11.values[iq, j])
                #导出附页2结束↑

                field_list = ['s1', 's2', 's3', 's4', 's5', 's6', 's7', 's8', 's9', 's10', 's11']
                table = document.add_table(rows=len(U2) + 1, cols=12, style="Table Grid")
                table.cell(0, 0).text = '项目'
                for iz in range(1, len(field_list) + 1):
                    table.cell(0, iz).text = field_list[iz - 1]
                for jz in range(1, len(U2) + 1):
                    table.cell(jz, 0).text = '参数' + str(jz)
                document.add_paragraph('xxxxx)')

2)设置字体及合并单元格

font_1 = document.styles['Normal']  # 样式
font_1.font.name = '思源宋体 CN'  # 字体
font_1.font.size = Pt(8) # 字号
fk = document.add_table(df2.shape[0] + 1, df2.shape[1],style="Table Grid") # 设置表格并设置框线
fk.cell(0, 0).merge(fk.cell(0, 4)) # 合并单元格
run = fk.cell(0, 0).paragraphs[0].add_run('xxxx') # 写入内容
run.font.name = '思源宋体 CN' # 指定单元格设定字体
run.font.size = Pt(20) # 指定单元格设定字号
fk.cell(0, 0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中

3)页眉页脚及分隔符

document.sections[0].header.paragraphs[0].text = 'xxxx'
document.sections[1].header.paragraphs[0].text = 'xxxx'
#add_page_number(document.sections[0].footer.paragraphs[0])
#document.sections[0].footer.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.RIGHT
document.sections[0].footer.paragraphs[0].text = 'xxxx'
document.sections[1].footer.paragraphs[0].text = 'xxxx'

document.add_section()  # 插入分节符,可当分页符用
document.add_paragraph("附页2:xxxxn")

4)import:

from docx.shared import Inches, Pt
from docx.oxml.ns import qn
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT#设置字符对齐docx


  • 标题
  • 内容
  • 验证码
提交
标题内容提交时间
没有记录!