一、需要把多个文件读写进附件2与附件3中,其中涉及到表中的表头与文件字段名不同,因此需要处理表头与文件的对应相关,在整体的写进过程中,还存在租户名的情况,因此也处理把报错的租户名进行处理,还一此其它问题也有处理最终的写入如下图所示(仅一部分

二、整体代码(里面增加了步骤的说明)

import os
import xlrd
import xlwt
from datetime import date
from xlutils.copy import copy
from xlutils.filter import process, XLRDReader, XLWTWriter'''步骤一:请取附件2与附件3的文件'''cwd = os.getcwd()
#遍历当前路径,路径,文件全部爬出来
for dirpaths, dirnaames,filenames in os.walk(cwd):
#dirpaths路径,dirnaames文件夹的名字,filenames所有文件的名字#判断.xls文件是否存在,xlrd只能读取.xls的文件,若为xlsm的文件请转化为.xls文件for filename in filenames:if filename.endswith(".xls") :if filename.startswith('附件2'):filename2 = filenamewb2 = xlrd.open_workbook(filename, formatting_info=True)sheet2 = wb2.sheet_by_index(0)elif filename.startswith('附件3'):filename3 = filenamewb3 = xlrd.open_workbook(filename, formatting_info=True)sheet3 = wb3.sheet_by_index(0)'''步骤二:把附件2与附件3中读取租户所在的行'''def get_rows(m, n, sheet):ans = {}maxr= 0for r in range(m, n):tenantName = sheet.cell(r, 0).value#去除空格的情况if tenantName:ans[tenantName] = rmaxr = rreturn ans,maxr rows2, r2 = get_rows(5, sheet2.nrows, sheet2) #附件2
rows2['ai稽核'] = rows2.pop('AI稽核') #表中的租户与文件中的租户同有差异,更改存储字典中租户名
rows3, r3 = get_rows(2, sheet3.nrows, sheet3) #附件3'''步骤三:写入数据进的表中,先复制原表'''def get_nwb(wb):nwb = copy(wb)nsheet = nwb.get_sheet(0)return nwb, nsheet
#获取原表与原表中的sheet
nwb2, nsheet2 = get_nwb(wb2)
nwb3, nsheet3 = get_nwb(wb3)'''步骤四:把文件中名称与表中的所需要的填写对应上,KEY为文件名,为后面写入文件做准备,需要读取的多个文件名用V隔开'''#获取附件2的需要填写的字段
file2 = {'容器服务哈池V容器服务呼池' : {'CPU总配额(G)':18, 'cpu使用率(%)':19, '内存总配额(G)':21, '内存使用率)(%)':22,'实例数(个)':24},'哈池mysqlV呼池mysql':{'存储总配额(G)':30,'存储使用率(%)':31},'redis哈池Vredis呼池':{'内存总配额(G)':33,'内存使用率(%)':34}
}#获取附件3的需要填写的字段
file3 = {'hdfs1':{'目录总配额(G)':6, '实例数(个)':7},'yarn':{'内存最大配额(G)':11, 'cpu_最大配额(个)':12, '实例数(个)':13}, 'hive':{'库总配额(G)':16, '实例数(个)':17}, 'hbase' : {'命名空间流量(G/min)':23, '命名空间请求限制数(G)':24, '表的数目(个)':25, '区域数(个)':26, '实例数(个)':27}, 'kafka1': {'分区数(个)':36, '副本数(个)':37, '容量(GB)':38, '实例数(个)':39}, '呼池mysqlV哈池mysql':{'存储总配额(G)':54, '存储使用量(G)':55, '存储使用率(%)':56, '实例数(个)':57}, 'redis哈池Vredis呼池':{'内存总配额(G)':77, '节点数(个)':78, '副本数(个)':79, '卷总配额(G)':80, '内存使用量(G)':81, '卷使用量(G)':82, '内存使用率(%)':83, '卷使用率(%)':84, '实例数(个)':85}, 'gbases': {'内存总配额':90, 'CPU总配额':91, '存储总配额':92, '实例数':93}, 'vertica哈池Vvertica呼池':{'内存总配额(G)':96, '实例数(个)':97}
}'''步骤五:获取原表的填写的格式'''w = XLWTWriter()
process(XLRDReader(wb3,'unknown.xls'), w)
style = w.style_list[sheet3.cell_xf_index(8, 3)]'''步骤六:读写文件的数据'''
def get_write_file(file, sheetname, rows, r):  #file各文件列,sheetname表名,rows行,r为最大的行数#把依次把各文件读入 allData 字典中for h, b in file.items(): #h为租户名,b为字典列名:列f = str(h).split('V') #f为文件的列表tenantData = {} #文件中列名:数值tenantName = '' #租户名allData = {}    #所有租户的字典for path in f:for line in open(path, 'r',  encoding='utf-8'): #打开表line = line.strip()   #去掉空格if line.find('*') != -1 :if tenantName and tenantData: #如何值不为空allData[tenantName] = tenantDataelif line.split(':')[0] == 'tenantName' :tenantName = line.split(':')[1].strip()if tenantName in allData:tenantData = allData[tenantName]                       else:tenantData = {}elif len(line.split(':')) > 1 and line.split(':')[1] and line.split(':')[1].strip() != 'NULL':k = line.split(':')[0].split('-')[-1]if path.find('redis') != -1 and k != 'hu服务名':k = k.split('s')[-1]k = k.split('u')[-1]k = k.split('r')[-1]elif path.find('gbases') != -1:k = k.split('(')[0]                   if k in b:tenantData.setdefault(k, 0)tenantData[k] += float(line.split(':')[1])allData[tenantName] = tenantData  #每完成一次allData字典,就把对应的值写入表(附件)中for key, value in allData.items():  #key是租户名,v为数据的字典 (从文件来for k, v in value.items():  #k是表头名,v为数据(从文件来if key not in rows:r += 1rows[key] = rsheetname.write(r, 0, key, style)for i in b:   #i是与表中的表头(从表来if i == k:sheetname.write(rows[key], b[i], v, style) break#写进附件2
get_write_file(file2, nsheet2, rows2, r2)
nwb2.save("{}\\newfile\\{}.xslx".format(cwd, filename2.split('.')[0]))#写进附件3
get_write_file(file3, nsheet3, rows3, r3)
nwb3.save("{}\\newfile\\{}.xslx".format(cwd, filename3.split('.')[0]))
print('结束')

Python _多文件入表中的记录相关推荐

  1. python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc

    利用Python处理和分析Excel表中数据实战 [利用python进行数据分析--基础篇]利用Python处理和分析Excel表中数据实战 原创 2017年06月28日 15:09:32 标签: p ...

  2. python 打开当前目录的txt文件-Python - 读取其他文件夹/目录中的文本文件

    这是我的情况:我有一些.txt文件在我可以运行脚本的不同目录中.Python - 读取其他文件夹/目录中的文本文件 mainDir/ -face/ -57268-face-_tracker.txt - ...

  3. mysql导入csv文件_Mysql——将CSV文件导入表中

    本教程展示如何用LOAD DATA INFILE 将 CSV 文件导入MySQL表中. LOAD DATA INFILE 语句可以读取文本文件并导入数据库中. 在导入文件之前,你需要做如下准备:导入文 ...

  4. mysql 批量替换 所有表_[收藏]批量替换一个数据库中所有表中所有记录

    /***********批量替换一个数据库中所有表中所有记录************/ declare @delStr nvarchar(500) set @delStr='这里是要替换的字符' /* ...

  5. mysql中怎么查表中的数据_[MySQL] 用select查询数据表中的记录

    用select查询数据表中的记录 select 语句的基本语法如下: select selection_list 选择那些列 from table_list 从那个表去选择行 where primar ...

  6. 使用SQLite数据库存储数据(2)-向表中插入记录

    向表中插入记录 向数据表Notebook中添加一条新的记事日志,成功插入记录后,会显示一个提醒视图. - (IBAction)addNote:(id)sender { char *errMsg; co ...

  7. mysql数据表中取几列_MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 转自:http://www.baike369.com/content/?id=5355 在MySQL中创建数据库的目的是为了使用其中的数据. 使用sel ...

  8. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

  9. Oracle如何删除表中重复记录

    1  引言 在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来读诸多不便,那么怎么删除这些重复没有用的数据呢? 平时工作中可能会遇到当试图对库表中的 ...

最新文章

  1. R语言之可视化-火山图
  2. hive同时不包含一些字符串_Hive中常用的字符串操作
  3. 有人说 GPT3 是“暴力美学”的结晶,它的工作原理你知道吗?| 动图详解
  4. (0083)iOS开发之layoutSubviews 的调用时机
  5. 零起点入门教程:用宜搭简单布局一个首页
  6. leetcode 564,546
  7. 通过日志恢复oracle序列,(存档日志包含序列84,要求序列36)怎么恢复啊?
  8. java 跨平台 ios_OGEngine发布跨平台版本,支持iOS及Android
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的在线商城系统
  10. python 标签字体大小_这文档动画,怎么用 Python 实现的?
  11. python函数求n年后本息_Python自定义函数计算给定日期是该年第几天的方法示例...
  12. Redis入门到精通-姜海强-专题视频课程
  13. chrome 中的console 下无法使用jquery选择器
  14. MyCat分片规则之枚举分片
  15. 卷积神经网络卷积层BN层计算原理和卷积BN层融合
  16. 鼎捷ERP易飞9.0.8实战课程-卓致羽-专题视频课程
  17. 2021-07-17 随笔
  18. python从图片提取文字_Python实现从图片提取文字
  19. python pip 换源_Python pip换源教程
  20. 2022-2028年全球避雷器行业收入年复合增长率CAGR为 1.8%

热门文章

  1. 如何使用win7自带的测试工具测试电脑性能?
  2. IC学习笔记——DRV8804
  3. 光伏输出特性matlab,基于MATLAB的光伏模块输出特性及MPPT的建模与仿真
  4. 微信小程序的key值
  5. Window下安装Rabitmq的插件以及激活
  6. 11 | 数据科学家80%时间都花费在了这些清洗任务上?
  7. 径向基函数和粗糙集在进化多目标优化中的应用
  8. 12、乐趣国学—践行《弟子规》的“信”懂得处世之道(下篇)
  9. JAVA基础加强篇09——IO流
  10. 记录:mac和win共享磁盘(同一局域网)