python文字转表格主要用到openpyxl模块。
主要的操作要两个,创建表格和写操作。
创建表格:

    book = Workbook()sheet = book.create_sheet(title='新数据表',index=0) #创建工作表格

插入:

    sheet.cell(row = 0, column = 0, value = 'data') #row是行,column 是列

保存:

    book.save('test.xlsx') #保存到test表格中

除了与表格相关的操作之外,文字转表格需要用到正则表达式来提取文本中的相应内容。

    PATTERN = u'([\u4e00-\u9fa5]{1,5}?(?:省|州|区|市))' #搜索省市比如湖北省、北京市s = data.encode()data_utf8=s.decode('utf-8')pattern = re.compile(PATTERN)m = pattern.findall(data_utf8)print(m)

一下是我寒假做的一个工作,是帮助北京大学的数据可视化团队收集疫情数据时,用来整理湖北省的疫情数据的。
网站文本:

2020年4月27日0—24时,全省新增新冠肺炎确诊病例0例,无境外输入病例。截至2020年4月27日24时,全省现有确诊病例0例,现有疑似病例0例。全省累计报告新冠肺炎确诊病例68128例,其中:武汉市50333例、孝感市3518例、黄冈市2907例、荆州市1580例、鄂州市1394例、随州市1307例、襄阳市1175例、黄石市1015例、宜昌市931例、荆门市928例、咸宁市836例、十堰市672例、仙桃市575例、天门市496例、恩施州252例、潜江市198例、神农架林区11例。全省累计治愈出院63616例,其中:武汉市46464例、孝感市3389例、黄冈市2782例、荆州市1528例、鄂州市1335例、随州市1262例、襄阳市1135例、黄石市976例、宜昌市894例、荆门市887例、咸宁市821例、十堰市664例、仙桃市553例、天门市481例、恩施州245例、潜江市189例、神农架林区11例。全省累计病亡4512例,其中:武汉市3869例、孝感市129例、黄冈市125例、鄂州市59例、荆州市52例、随州市45例、荆门市41例、襄阳市40例、黄石市39例、宜昌市37例、仙桃市22例、咸宁市15例、天门市15例、潜江市9例、十堰市8例、恩施州7例、神农架林区0例。全省累计追踪密切接触者282236人,尚在接受医学观察1696人。4月27日,全省新增无症状感染者27例,转确诊0例,解除隔离10例,尚在医学观察的无症状感染者599例。

python代码:

#!/usr/bin/env python
#encoding: utf-8
#description: 从字符串中提取疫情对应的市、州人数import re
import sys
import importlib
importlib.reload(sys)
from openpyxl import Workbook
import datetime
from time import time
import time
city={'武汉市':1,'孝感市':2,'黄冈市':3,'随州市':4,'荆州市':5,'襄阳市':6,'黄石市':7,'宜昌市':8,'荆门市':9,'鄂州市':10,'咸宁市':11,'十堰市':12,'仙桃市':13,'天门市':14,'恩施州':15,'潜江市':16,'神农架林区':17
}
numberAdjust= {0:8,1:11,2:10, 3:15,4:17,5:18
}
def datetime_analysis(array):data=' '.join(array)PATTERN = u'(\d{4}[\u4e00-\u9fa5]\d{1,2}[\u4e00-\u9fa5]\d{1,2}[\u4e00-\u9fa5])'s = data.encode()data_utf8=s.decode('utf-8') pattern = re.compile(PATTERN)m = pattern.findall(data_utf8)datetime1=m[0]datetime1=datetime1.replace("年", "/").replace("月", "/").replace("日", " ").strip()n = datetime1.split('/')dateDif=int(n[2])dateDif=dateDif+1n[2]=str(dateDif)datetime2='/'.join(n)datetime1=datetime1datetime2=datetime2return datetime1,datetime2
def suspected_analysis(array):data=' '.join(array)PATTERN = u'疑似病例[\u4e00-\u9fa5]{0,2}\d{1,4}[\u4e00-\u9fa5]{0,1},当日[\u4e00-\u9fa5]{2,4}\d{0,4}[\u4e00-\u9fa5]{0,1},当日排除\d{1,4}人's = data.encode()data_utf8=s.decode('utf-8') pattern = re.compile(PATTERN)m = pattern.findall(data_utf8)#print(m)for i in m:n=re.findall("\d{1,4}",i)n= [int(x) for x in n]   return ndef asymptomatic_infection(array,datetime1):file = open('./asymptomatic_temp.txt')lines = file.readlines()file.closeprint(datetime1)print(lines)datetimeTemp=datetime1.split('/')print(datetimeTemp)datetime2=datetimeTemp[0]+'/'+datetimeTemp[1]+'/'+str(int(datetimeTemp[2])-1)PATTERN1 = datetime2+u':(\\d{1,4})'data1=' '.join(lines)s = data1.encode()data_utf8=s.decode('utf-8') pattern1 = re.compile(PATTERN1)line = pattern1.findall(data_utf8)print(line)data=' '.join(array)PATTERN = u'新增无症状感染[\u4e00-\u9fa5]{0,2}\d{1,4}[\u4e00-\u9fa5]{0,1}.*解除隔离\d{0,4}例's = data.encode()data_utf8=s.decode('utf-8') pattern = re.compile(PATTERN)m = pattern.findall(data_utf8)print(m)for i in m:n=re.findall("\d{1,4}",i)n= [int(x) for x in n]  print(n)totalTemp=int(line[0])+n[0]f = open('./asymptomatic_temp.txt', 'a') #内容追加f.write('\n'+datetime1+":"+str(totalTemp)) #可写所有能迭代的类型,例如listf.close()res=[]res.append(n[0])res.append(totalTemp)res.append(n[2])return res
def creat_excel(sheet,array):colums=['序号','统计级别','数据起始时间','数据结束时间','国家','省份','城市','区县','新增确诊人数','新增疑似人数','新增治愈人数','新增死亡人数','新增无症状感染人数','新增无症状感染治愈人数','新增无症状感染死亡人数','累计确诊人数','累计疑似人数','累计治愈人数','累计死亡人数','累计无症状感染人数','累计无症状感染治愈人数','累计无症状感染死亡人数','核减人数','累计核减人数','数据源','数据发布时间','数据源文本','数据源链接','数据间接发布时间','数据间接发布来源','数据间接发布来源链接','数据收集时间','数据收集方式','数据收集人员/程序姓名','数据是否核查','数据首次核查时间','数据首次核查方式','数据首次核查人员/程序姓名','数据首次核查状态','更正人员','更正时间','数据再次核查时间','数据再次核查方式','数据再次核查人员/程序姓名','数据再次核查状态','备注']data=' '.join(array)datetime1,datetime2=datetime_analysis(array)datetime3=datetime1+' 9:00'datetime4=datetime.datetime.now().strftime("%Y/%m/%d %H:%M")suspectedCase=suspected_analysis(array)if(len(suspectedCase)>2):suspectedCaseTotal=suspectedCase[0]suspectedCaseAdd=suspectedCase[1]-suspectedCase[2]else:suspectedCaseTotal=suspectedCase[0]suspectedCaseAdd=0asymptomatic=asymptomatic_infection(array,datetime1)#url=array[0]columsDefault = {1:'城市级',2:datetime1,3:datetime2,4:'中国',5:'湖北省',24:'湖北省卫健委',25:datetime3,26:data,27:'http://wjw.hubei.gov.cn/fbjd/dtyw/index.shtml',31:datetime4,32:'手动',33:'林增敏',34:'已核查',35:datetime4,36:'手动',37:'林增敏',38:'核查通过'}citys=['武汉市','孝感市','黄冈市','随州市','荆州市','襄阳市','黄石市','宜昌市','荆门市','鄂州市','咸宁市','十堰市','仙桃市','天门市','恩施土家族苗族自治州','潜江市','神农架林区','监狱系统','地区待确定']   for i in range(0,len(colums)):sheet.cell(row = 1, column = i+1, value = colums[i])if(i in columsDefault):for j in range(1,len(citys)+2):sheet.cell(row = j+1, column = i+1, value = columsDefault[i])sheet.cell(row = 21, column = 2, value = '省级')sheet.cell(row = 21, column = 24, value = -1132)sheet.cell(row = 21, column = 10, value = suspectedCaseAdd)sheet.cell(row = 21, column = 17, value = suspectedCaseTotal)sheet.cell(row = 21, column = 13, value = asymptomatic[0])sheet.cell(row = 21, column = 14, value = asymptomatic[2])sheet.cell(row = 21, column = 20, value = asymptomatic[1])sheet.cell(row = 20, column = 13, value = asymptomatic[0])sheet.cell(row = 20, column = 14, value = asymptomatic[2])sheet.cell(row = 20, column = 20, value = asymptomatic[1])for i in range(1,len(citys)+1):sheet.cell(row = i+1, column = 7, value = citys[i-1])
def text_analysis(sheet,array): PATTERN = u'([\u4e00-\u9fa5]{1,5}?(?:省|州|区|市))(\\d+)'PATTERN1 = u'([\u4e00-\u9fa5]{1,3}市(?:和|、){0,1}?)+(?:均为|各)(\\d+)'PATTERN2 = u'([\u4e00-\u9fa5]{2}市)'count=0for data in array:s = data.encode()data_utf8=s.decode('utf-8')#print(data_utf8)pattern = re.compile(PATTERN)m = pattern.findall(data_utf8)sum=0for date2 in data_utf8.split(','):pattern1 = re.compile(PATTERN1)m1 = pattern1.search(date2)if(m1):#print(m1.group(0))pattern2 = re.compile(PATTERN2)m2 = pattern2.findall(m1.group(0))number=re.findall('\\d+',m1.group(0))for data3 in m2:tup=(data3,number[0])m.append(tup)print(m)for i in m:#print(i[0]+" "+i[1]) if(i[1]!='0'):sheet.cell(row = city[i[0]]+1, column = numberAdjust[count]+1, value = int(i[1]))sum=sum+int(i[1])if(count!=6):sheet.cell(row = len(city)+4, column = numberAdjust[count]+1, value = sum)count=count+1 if __name__ == '__main__':with open('.\data.txt','r',encoding='UTF-8') as lines:  #一次性读入txt文件,并把内容放在变量lines中data=lines.readlines()  #返回的是一个列表,该列表每一个元素是txt文件的每一行 book = Workbook()sheet = book.create_sheet(title='新数据表',index=0) #创建工作表格array=[]for i in data:if(i!='\n'):array.append(i)creat_excel(sheet,array)text_analysis(sheet,array)#日期格式化datetime1,datetime2=datetime_analysis(array)datetime1=datetime1.replace("/", "-").strip()y = datetime.datetime.strptime(datetime1, '%Y-%m-%d')detester = y.strftime('%Y-%m-%d')datetime1=detester.replace("-", "").strip()provinceName='hubei'fileName=provinceName+'CaseStatistics_'+datetime1+'.xlsx'book.save(fileName) #保存到test表格中

效果图:

python 文字转表格 openpyxl相关推荐

  1. python自动化pdf报告_[Python] 自动化办公 PDF提取文字、表格、图片

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 本例可以学到的知识点: 使用 pdfplumber 提取 PDF 中 ...

  2. python自动办公pdf_[Python] 自动化办公 PDF提取文字、表格、图片

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 本例可以学到的知识点: 使用 pdfplumber 提取 PDF 中 ...

  3. 使用Python处理excel表格(openpyxl)教程

    现在有个小任务,需要处理excel中的数据.其实就是简单的筛选,excel玩的不熟练,而且需要处理的表有70多个,于是想着写个脚本处理一下吧.python中的openpyxl包可以轻松实现读写exce ...

  4. python调用百度AI识别文字和表格

    python调用百度AI识别文字和表格 获取账户信息 1.需要先注册百度AI,获得ID和密钥.百度AI社区关于注册的详细说明:https://ai.baidu.com/forum/topic/show ...

  5. python百度paddle表格文字识别生成excel

    表格识别技术主要使用基于注意力机制的图片描述模型 RARE,整体流程如下图所示,对于其中的表格区域进行表格识别处理. 表格识别的难点主要在于表格结构的提取,以及将表格信息与 OCR 信息融合.整体流程 ...

  6. python怎么编辑excel_python 修改excel表格数据-关于如何用python 编辑 excel表格

    python对Excel中数据的处理 把你的写入excel 的内容编码一哈 例如 str('内容').encode('utf-8') 或者str('内容').encode('gbk') 再写入exce ...

  7. python处理excel案例_使用Python处理Excel表格的简单方法

    使用Python处理Excel表格的简单方法 Excel 中的每一个单元,都会有这些属性:颜色(colors).number formatting.字体(fonts).边界(borders).alig ...

  8. python处理excel表格大小-如何用python处理excel表格

    前面我们已经学到了很多Python在数学领域的应用,用Python编程可以轻松解决一些数学中的常见问题.当然Python的功能应用还远远不止于此,我们的很多日常工作也可以用Python来实现.今天南京 ...

  9. python与excel表格-如何用python处理excel表格

    openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 from openpyxl import l ...

最新文章

  1. Lambda演算学习笔记
  2. 皮一皮:论家庭地位...
  3. Windows 内核数据结构学习总结
  4. 关于解决[INSTALL_FAILED_UPDATE_INCOMPATIBLE]
  5. 音视频技术开发周刊 | 148
  6. 查看hive中某个表中的数据、表结构及所在路径
  7. Codeforces Round #585 (Div. 2) F. Radio Stations 2-sat + 神仙建模
  8. 不使用输入框如何实现下拉_如何利用Axure实现下拉子菜单?
  9. VIM:使用js高亮对json文件着色
  10. Kubernetes Scheduler Deep Dive
  11. java计算信息熵_Java计算文本字符的信息熵
  12. 《计算机网络微课堂》一、计算机网络概述(你确定不点进来看看?)
  13. a5松下驱动器参数设置表_「精品干货」松下A5伺服驱动器参数设置与常见故障解决分析...
  14. MySQL备份与恢复
  15. windwos docker安装k8s一直staring的解决方法
  16. 云服务器是widows7系统,云服务器win7系统
  17. linux 定位 踩内存_记录一次用户态踩内存问题
  18. 联想ThinkPad笔记本预装win10改为win7
  19. VMware安装的虚拟机窗口如何自适应屏幕大小
  20. 《20岁无资本无未来》

热门文章

  1. 验证 %java_home%_报错:JAVA_HOME cannot be determined from the Registry的解决
  2. 打脸谢尔顿的电池,了解一下
  3. wap.php区别,WAP与PHP程序设计之基础篇
  4. 教你做Ghost系统盘--Windows2000、XP、2003系统万能Ghost全攻略New!!!!!!
  5. Linux-开发与管理 P1 shell编程
  6. Python的内建数据结构总结
  7. 计算机代数的应用,计算机代数及其应用-陶庆生(1991).pdf
  8. C语言零基础速通——函数(7分钟搞懂)
  9. 系统集成项目管理工程师(软考中级)—— 第二十五章 法律法规(补充) 笔记分享
  10. FOJ 1021 飞船赛