Python自动化办公工具库盘点:Excel、Word、PPT、PDF处理攻略
Python自动化操作Excel、Word、PPT、PDF工具
本文全面涵盖了Excel、Word、PPT、PDF、电子邮件、微信、文件处理等办公场景自动化的库,旨在为用户提供实用的工具。说到自动化Excel,主要的库是xlwings、openpyxl、xlrd、xlwt、xlutils和xlsxwriter。
其中,xlwings提供了从Python调用Excel宏的功能,并允许您编写自定义函数。
openpyxl适合读写Excel2010格式文件,而xlwt只能进行写操作。
;xlutils结合了xlrd和xlwt,提供在处理Excel文件后保存新文件的工具。
xlsxwriter是一个功能齐全的库,支持创建和写入ExcelXLSX文件。
对于Word自动化,python-docx库提供了创建和更新.docx文件的功能。
texttract库可以批量生成Word文件,但是安装时需要依赖。
PPT自动化主要依赖于python-pptx库来创建和更新.PPTX文件。
在ODF自动化方面,Relationio库提供了一种简单的方法来输出多种文件格式,例如odt、ods、png、svg,支持多种文件类型,并允许您将Python对象与报告关联。
对于PDF自动化,PyPDF2库可以拆分、合并、裁剪和转换PDF文件,并支持添加自定义数据、查看选项和密码、检索文本和元数据以及合并整个文件。
ReportLab库功能强大、超级稳定且开源。
PDFminer库是一个用于创建复杂的数据驱动PDF文档和自定义矢量图形的引擎,专门设计用于从PDF文档中提取文本。
在电子邮件自动化方面,DjangoCelerySES库提供了使用django-celery发送电子邮件的功能,从而简化了您的代码。
Envelopes库封装了电子邮件和smtplib模块并简化了外发电子邮件处理。
Flanker库用于解析电子邮件地址。
MIME格式。
imbox库用于读取IMAP邮箱并将电子邮件内容转换为机器可读的数据。
inbox.py库提供异步SMTP服务器功能。
同步引擎库通过RESTfulAPI提供强大的电子邮件同步平台。
Lamson库是一个纯PythonSMTP服务器,用于构建功能强大的电子邮件应用程序。
MarrowMailer库使您可以轻松地从应用程序发送电子邮件。
管理平台。
提供现代且简化的Web用户界面。
smtplib库是Python中用于发送电子邮件的SMTP客户端现。
在微信自动化方面,wxpy库提供了基于itchat的优化接口,增强了模块的易用性和功能性。
自动处理文件。
操作系统模块为与操作系统相关的功能提供了方便的接口,用于读取和写入文件、操作路径、读取多个文件行、创建临时文件和目录以及导出数据。
各种格式,如Excel、JSON、HTML、YAML、CSV等。
SnowNLP和TextBlob库分别提供中文和英文文本处理功能。
TextGrocery库是科学计算的基础包,支持中文和英文。
多维数组对象和各种API。
python写excel4000行要多久的简单介绍
在这篇文章中,CTO首席笔记将向您介绍用python编写excel4000行需要多长时间以及相关内容。
希望对大家有帮助,一起来看看吧。
是不是很慢?excel表格达到4000行时如何解决?
打开任务管理器,查看EXCEL.exe进程使用了多少内存,然后查看计算机上还剩多少内存。
只有4,000个条目,所以应该不会卡住。
一般来说,EXCEL对行数不是很敏感,太多的列很容易导致内存占用。
不超过100行
最近需要帮RA姐姐写一个合并excel工作表的脚本..源数据4000+优秀工作表分布在9个xlsm文件中文件内容是中英文数据的混合。
寻找工具
定义任务后的第一步是寻找一个易于使用的库。
?PythonExcel列出了xlrd、xlwt和xlutils软件包,但是
都相当老了,甚至xlwt在07版本之后也不支持excel
他们的文档不是很好。
,你可能需要看源码,姐姐的工作还挺严格的,而且我现在学期末了,没有时间仔细看源码
再搜索一下。
然后我找到了openpyxl,它支持Excel07+。
文档清晰易读,参考教程和API文档就可以快速上手>安装
很简单,pipinstallopenpyxl就可以了,哈哈~
因为我不会'不需要处理图像,我没有安装枕头。
一些注意事项
源文件每个大约1~2MB,比较小,可以直接读入内存进行处理。
由于我们是和excel打交道,而他们整个团队显然都是在win下工作的(数据全都存储在excel中==,商业专业的人……),所以这个脚本应该在win下完成
这个任务根本不需要我修改现有文件!羞耻...我只需要读取、处理和写入其他文件
学习使用
好吧,只需打开cmd,然后使用pythonshell来玩这个模块。
让我们开始吧...(ipython没有在win下安装,羞耻)
基本上,我只需要导入两个东西来创建这个小脚本
fromopenpyxlimportWorkbookfromopenpyxlimportload_workbook
load_workbook,顾名思义,将文件导入内存是最基本的类,用于在内存中创建文件并最终写入磁盘。
工作
首先我需要导入这个文件
inwb=load_workbook(filename)
你得到的是一个对象工作簿
然后我需要创建一个新文件
outwb=Workbook()
然后在这个新文件中,使用create_sheet创建一些新的工作表,例如
careerSheet=outwb.create_sheet(0,'career')
它会从Insert一个名为career的工作表到head中(即用法类似于pythonlist'sinsert)
接下来,我需要遍历输入文件的每个工作表,并根据表名做一些工作(例如,如果表名不是数字,我不需要处理它),openpyxl支持像使用字典一样通过表名获取工作表获取工作簿表名的方法是get_sheet_names
forsheetNameininwb.get_sheet_names():ifnotsheetName.isdigit():继续
sheet=inwb[sheetName]
获取工作表后,按He列邢氏很照顾她。
openpyxl会根据工作表中数据的实际面积来确定行数和列数,获取行数和列数的方法是sheet.rows和sheet.columns,可以像列表一样使用。
例如,如果我想跳过一个数据少于2列的表,我可以这样写
iflen(sheet.columns)2:继续
如果我想获取工作表数据ini对于前两列,可以这样写
colA,colB=sheet.columns[:2]
除了使用列和行来获取行之外以及此工作表的列,您还可以使用Excel单元格代码来获取Region,比如
cells=sheet['A1':'B20']
有点像excel自带的函数,可以输出一个二维区域~
为了简化处理,当我找到一个没有C列的工作表时,我想创建一个与A列长度相同的空C列。
然后我可以使用sheet.cell方法传入单元格并加一个null值来创建新列。
alen=len(colA)foriinrange(1,alen+1):
sheet.cell('C%s'%(i)).value=None
注意:Excel单元格命名从1开始~
上面的代码也显示要获取单元格值,使用cell.value(可以是左值或右值)。
或者Time(datetime.datetime),也会在excel文件中生成对应的数据类型。
拿到每个单元格的值后,就可以进行操作了~openpyxl会自动将字符串编码为unicode,所以字符串都是unicode类型。
除了使用cell.value逐个单元格修改值之外,还可以逐行添加到工作表中
sheet.append(strA,dateB,numC)
最后,当新文件写入后,直接用workbook.save保存即可
outwb.save("test.xlsx")
这样就可以了覆盖当前的现有文件,即使您之前已将文件读入内存。
一些注意事项
如果在遍历列中每个单元格时想要获取当前单元格在这个列对象中的下标
foridx,cellinenumerate(colA):#dosome...
为了避免检索到的数据两端出现不可见的空格(Excel文件中非常常见的陷阱),请记住删除()
如果工作表中的某个单元格中没有数据,openpyxl会设置它的值为None,所以如果你想根据单元格值进行处理,你不能假设它的类型。
最好使用
ifnotcell.valuecontinue
这样的语句来评估。
首先
ifnotcell.value继续
如果待处理的excel文件中有很多n个oise,比如当你期望cell为有时,有些表中的数据可能是字符串,这种情况下,可以使用ifisinstance(cell.value,unicode):break
和。
其他报表的处理。
看来win下cmd不太容易准备utf-8编码页如果中文简单的话可以用936(GBK,会自动从unicode转换)。
转换为GBK并输出到终端。
一些帮助处理中文问题的小函数
我正在处理的表中有一些字符超出GBK范围当我需要打印一些信息来监控处理进度时,非常麻烦。
幸运的是,它们可以被忽略,我可以用空格替换它们,然后打印noyingseperatorsdot=u'\u00b7'dash=u'\u2014'emph=u'\u2022'dot2=u'\u2027'seps=(u'',点,破折号,emph,dot2)defget_clean_ch_string(chstring):??"""从中文字符串中删除烦人的分隔符。
用法:
cleanstring=get_clean_ch_string(chstring)?"""
cleanstring=chstring??forsepinseps:
?cleanstring=cleanstring.replace(sep,u'')returncleanstring
另外,我还有一个要求,就是改英文名[空格]中文名字分为姓氏英文、英文名、中文姓氏、中文名。
首先,我需要能够将英文和中文分开,我的方法是使用普通匹配来匹配unicode范围内的普通中文和英文字符。
中英文匹配的常见模式如下:
#regexpatternmatchingallasciicharactersasciiPattern=ur'[%s]+'%''.join(chr(i)foriinrange(32,127))#regexpatternmatchingallcommonChinesecharactersandseporatorschinesePattern=ur'[\u4e00-\u9fff.%s]+'%(''.join(seps))
英文替换为ASCII可打印字符范围典型的汉字范围是\u4e00-\u9fff,sep是前面指定的GBK范围之外的字符。
除了简单的分离之外,我还需要处理只有中文名没有英文名、只有英文名没有中文名等情况。
判断逻辑如下:
defsplit_name(name):?""分割[英文名,中文名]。
如果其中一个不存在,则返回None。
用法:
engName,chName=split_name(name)?""
matches=re.match('(%s)(%s)'%(asciiPattern,chinesePattern),name)ifmatches:?#英文名+中文名
returnmatches.group(1).strip(),matches.group(2).strip()else:
matchess=re.findall('(%s)'%(ChinesePattern),name)
matches=''.join(匹配).strip()?ifmatches:?#只有中文名
returnNone,matcheselse:?#Englishnameonly
matches=re.findall('(%s)'%(asciiPattern),name)return''.join(matches).strip(),None
拿到中文名字后,需要将其分为姓氏和名字,所以因为任务要求名字不需要划分清楚,所以我按照中国俗名划分方法来划分——前二、三字为姓,四字中的前二字字符是姓氏和名字前面带有分隔符(少数民族名字)(这里使用了前面的get_clean_ch_string函数去除分隔符)如果名字较长并且没有分隔符,则认为整个字符串是一个名字。
(注意,英文中的firstname指的是名字,姓氏指的是姓氏,第2333章,WX将返回姓氏。
*如果我是...WXYZ,将返回全名
nameasthelast。
?*如果名称是..ABC*XYZ...,分隔符之前的部分
将返回asthelastname。
?用法:
chFirstName,chLastName=split_ch_name(chName)?"""
iflen(ch名称)4:?#XYorXYZ
chLastName=chName[0]
chFirstName=chName[1:]eliflen(chName)==4:?#WXYZ
?chLastName=chName[:2]
chFirstName=chName[2:]else:?#longer
??cleanName=get_clean_ch_string(chName)
nameParts=ceanName.split()printu''.join(nameParts)iflen(nameParts)2:?#...WXYZ
returnNone,nameParts[0
?chLast名称,chFirstName=nameParts[:2]?#..ABC*XYZ...
returnFirstName,chLastName
用空格分隔英文名非常容易。
一部分是名字,第二部分是姓氏,另一部分暂时可以忽略。
关于使用python写excel,新手求教
使用xlrd读取excel,使用xlwt写入,这是针对简单的excel。
xlrd可以读取255列(A,B,C,...),行数与excel中的最大行数相同。
您可以使用样式来更改单元格字体颜色等。
pipinstallxlwt
示例:
import?xlwt
from?datetime?import?datetime
style0?=?xlwt.easyxf('字体:?name?Times?New?Roman,?color-index?red,?bold?on',
num_format_str='#,##0.00')
style1?=?xlwt.easyxf(num_format_str='D-MMM-YY')
wb?=?xlwt.Workbook()
ws?=?wb.add_sheet('A?Test?Sheet')
ws.write(0,?0,?1234.56,?style0)
ws.write(1,?0,?datetime.now(),?style1)
ws.write(2,?0,?1)
ws.write(2,?1,?1)
ws.write(2,?2,?xlwt.Formula("A3+B3"))
wb.save('example.xls')
python应该如何处理excel表格超过65536行?1如果你想让EXCEL好评超过65536行,可以安装EXCEL2007或以上行,2007或以上1048576行。
2.对于EXCEL2003以下的版本,有256列和65536行。
对于EXCEL2007,有16384列和1048576行。
,需要查看最大行数和列数,可以使用Ctrl+下方向键和右方向键。
是不是很慢?
您直接查询服务器,并且只将数据读入内存一次。
你现在的代码首先要从数据库读取,然后写入df可以认为是内存数据库,写入需要一些相关的处理,比如索引。
然后需要从df中读取并写入excel,这一步写入磁盘,耗时最长。
结论:以上是CTO头条整理的关于python写excel4000行需要多长时间的全部内容感谢您花时间阅读本网站的内容会对您有所帮助更多关于,别忘了在这个网站上查找有关用python编写excel4000行需要多长时间的相关信息。
入门必备案例——用Python实现九九乘法表的几种方式,超级简单~
学习Python时,掌握基本操作很重要。今天我们将通过乘法表的实现来加深对循环的理解和应用。
首先,让我们看一下使用两级循环的实现。
使用两个for循环,我们可以轻松生成乘法表。
接下来,尝试使用双while循环的另一种实现。
该方法还生成乘法表,展示了Python语言的灵活性。
第三种方法使用while循环和for循环的组合来有效地完成目标。
第四种方法结合使用for和while循环来进一步展示编程的多功能性。
第五种方法可以通过定义变量a来简化代码逻辑,让实现过程更加清晰。
第六种方法通过引入递归技术并使用递归函数实现乘法表来展示Python语言的强大功能。
第七种方法使用单行语句实现,体现了Python简洁高效的编程风格。
最后对上述代码进行优化,进一步提高效率。
通过从不同角度练习乘法口诀表,不仅可以加深你对Python语言的理解,还可以训练你的编程思维和解决问题的能力。
今天的学习就到此为止。
希望读者能够积极实践,将学到的知识转化为实际操作,不断提高自己的编程水平。