问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python计算excel有多少行

发布网友 发布时间:2024-09-06 18:07

我来回答

1个回答

热心网友 时间:2024-10-19 00:57

导读:很多朋友问到关于python计算excel有多少行的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

python怎么判断excel行

不知道你的问题是想问行的什么,我理解成就是判断excel有多少行

判断不为空就行了代码如下:

from?openpyxl?import?load_workbook

wb?=?load_workbook(filename=r'读取路径.xlsx')??##读取路径

ws?=?wb.get_sheet_by_name("Sheet1")??##读取名字为Sheet1的sheet表

num?=?1

while?1:#设定为死循环

????cell?=?ws.cell(row=num,?column=1).value

????if?cell:

????????num?=?num?+1

????else:

????????print(num)

????????exit()

运行结果(已经删除我的路径):

pythonopenpyxl写xlsx最多写多少行

不超过100行

最近要帮做RA的老姐写个合并excel工作表的脚本……源数据是4000+个excel工作表,分布在9个xlsm文件里,文件内容是中英文混杂的一些数据,需要从每张表中提取需要的部分,分门别类合并到多个大的表里。

寻觅工具

确定任务之后第一步就是找个趁手的库来干活。?PythonExcel上列出了xlrd、xlwt、xlutils这几个包,但是

它们都比较老,xlwt甚至不支持07版以后的excel

它们的文档不太友好,都可能需要去读源代码,而老姐的任务比较紧,加上我当时在期末,没有这个时间细读源代码

再一番搜索后我找到了openpyxl,支持07+的excel,一直有人在维护,文档清晰易读,参照Tutorial和API文档很快就能上手,就是它了~

安装

这个很容易,直接pipinstallopenpyxl,呵呵呵~

因为我不需要处理图片,就没有装pillow。

一些考虑

源文件大约一个在1~2MB左右,比较小,所以可以直接读入内存处理。

既然是处理excel,何况他们整个组显然都是win下干活(数据都用excel存了==,商科的人啊……),这个脚本还是在win下做吧

这个任务完全不需要我对现有的文件做修改!囧……我只要读入、处理、再写出另一个文件就行了

学习使用

嗯,就是打开cmd,然后用python的shell各种玩这个模块来上手……(win下没有装ipython,囧)

做这个小脚本基本上我只需要import两个东西

fromopenpyxlimportWorkbookfromopenpyxlimportload_workbook

load_workbook顾名思义是把文件导入到内存,Workbook是最基本的一个类,用来在内存里创建文件最后写进磁盘的。

干活

首先我需要导入这个文件

inwb=load_workbook(filename)

得到的就是一个workbook对象

然后我需要创建一个新的文件

outwb=Workbook()

接着在这个新文件里,用create_sheet新建几个工作表,比如

careerSheet=outwb.create_sheet(0,'career')

就会从头部插入一个叫career的工作表(也就是说用法类似pythonlist的insert)

接下来我需要遍历输入文件的每个工作表,并且按照表名做一些工作(e.g.如果表名不是数字,我不需要处理),openpyxl支持用字典一样的方式通过表名获取工作表,获取一个工作簿的表名的方法是get_sheet_names

forsheetNameininwb.get_sheet_names():??ifnotsheetName.isdigit():????continue

??sheet=inwb[sheetName]

得到工作表之后,就是按列和行处理了。openpyxl会根据工作表里实际有数据的区域来确定行数和列数,获取行和列的方法是sheet.rows和sheet.columns,它们都可以像list一样用。比如,如果我想跳过数据少于2列的表,可以写

iflen(sheet.columns)2:??continue

如果我想获取这个工作表的前两列,可以写

colA,colB=sheet.columns[:2]

除了用columns和rows来得到这个工作表的行列之外,还可以用excel的单元格编码来获取一个区域,比如

cells=sheet['A1':'B20']

有点像excel自己的函数,可以拉出一块二维的区域~

为了方便处理,遇到一个没有C列的工作表,我要创建一个和A列等长的空的C列出来,那么我可以用sheet.cell这个方法,通过传入单元格编号和添加空值来创建新列。

alen=len(colA)foriinrange(1,alen+1):

??sheet.cell('C%s'%(i)).value=None

注意:excel的单元格命名是从1开始的~

上面的代码也显示出来了,获取单元格的值是用cell.value(可以是左值也可以是右值),它的类型可以是字符串、浮点数、整数、或者时间(datetime.datetime),excel文件里也会生成对应类型的数据。

得到每个单元格的值之后,就可以进行操作了~openpyxl会自动将字符串用unicode编码,所以字符串都是unicode类型的。

除了逐个逐个单元格用cell.value修改值以外,还可以一行行append到工作表里

sheet.append(strA,dateB,numC)

最后,等新的文件写好,直接用workbook.save保存就行

outwb.save("test.xlsx")

这个会覆盖当前已有的文件,甚至你之前读取到内存的那个文件。

一些要注意的地方

如果要在遍历一列的每个单元格的时候获取当前单元格的在这个column对象里的下标

foridx,cellinenumerate(colA):??#dosomething...

为了防止获取的数据两端有看不见的空格(excel文件里很常见的坑),记得strip()

如果工作表里的单元格没有数据,openpyxl会让它的值为None,所以如果要基于单元格的值做处理,不能预先假定它的类型,最好用

ifnotcell.value??continue

之类的语句来先行判断

如果要处理的excel文件里有很多noise,比如当你预期一个单元格是时间的时候,有些表的数据可能是字符串,这时候可以用

ifisinstance(cell.value,unicode):??break

之类的语句处理。

win下的cmd似乎不太好设定用utf-8的codepage,如果是简体中文的话可以用936(GBK),print的时候会自动从unicode转换到GBK输出到终端。

一些帮忙处理中文问题的小函数

我处理的表有一些超出GBK范围的字符,当我需要把一些信息print出来监控处理进度的时候非常麻烦,好在它们都是可以无视的,我直接用空格替换再print也行,所以加上一些我本来就要替换掉的分隔符,我可以:

#annoyingseperatorsdot=u'\u00b7'dash=u'\u2014'emph=u'\u2022'dot2=u'\u2027'seps=(u'.',dot,dash,emph,dot2)defget_clean_ch_string(chstring):??"""RemoveannoyingseperatorsfromtheChinesestring.

??Usage:

????cleanstring=get_clean_ch_string(chstring)??"""

??cleanstring=chstring??forsepinseps:

????cleanstring=cleanstring.replace(sep,u'')??returncleanstring

此外我还有一个需求,是把英文名[空格]中文名分成英文姓、英文名、中文姓、中文名。

首先我需要能把英文和中文分割开,我的办法是用正则匹配,按照常见中英文字符在unicode的范围来套。匹配英文和中文的正则pattern如下:

#regexpatternmatchingallasciicharactersasciiPattern=ur'[%s]+'%''.join(chr(i)foriinrange(32,127))#regexpatternmatchingallcommonChinesecharactersandseporatorschinesePattern=ur'[\u4e00-\u9fff.%s]+'%(''.join(seps))

英文就用ASCII可打印字符的范围替代,常见中文字符的范围是\u4e00-\u9fff,那个seps是前面提到过的超出GBK范围的一些字符。除了简单的分割,我还需要处理只有中文名没有英文名、只有英文名没有中文名等情况,判断逻辑如下:

defsplit_name(name):??"""Split[Englishname,Chinesename].

????Ifoneofthemismissing,Nonewillbereturnedinstead.

??Usage:

????engName,chName=split_name(name)??"""

??matches=re.match('(%s)(%s)'%(asciiPattern,chinesePattern),name)??ifmatches:?#Englishname+Chinesename

????returnmatches.group(1).strip(),matches.group(2).strip()??else:

????matches=re.findall('(%s)'%(chinesePattern),name)

????matches=''.join(matches).strip()????ifmatches:?#Chinesenameonly

??????returnNone,matches????else:?#Englishnameonly

??????matches=re.findall('(%s)'%(asciiPattern),name)??????return''.join(matches).strip(),None

得到了中文名之后,我需要分割成姓和名,因为任务要求不需要把姓名分割得很明确,我就按照常见的中文名姓名分割方式来分——两个字or三个字的第一个字是姓,四个字的前两个字是姓,名字带分隔符的(少数民族名字)分隔符前是姓(这里用到了前面的get_clean_ch_string函数来移除分隔符),名字再长一些又不带分割符的,假设整个字符串都是名字。(注意英语的firstname指的是名,lastname指的是姓,2333)

defsplit_ch_name(chName):??"""SplittheChinesenameintofirstnameandlastname.

????*IfthenameisXYorXYZ,Xwillbereturnedasthelastname.

????*IfthenameisWXYZ,WXwillbereturnedasthelastname.

????*Ifthenameis...WXYZ,thewholenamewillbereturned

?????asthelastname.

????*Ifthenameis..ABC*XYZ...,thepartbeforetheseperator

?????willbereturnedasthelastname.

??Usage:

????chFirstName,chLastName=split_ch_name(chName)??"""

??iflen(chName)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=cleanName.split()????printu''.join(nameParts)????iflen(nameParts)2:?#...WXYZ

??????returnNone,nameParts[0]

????chLastName,chFirstName=nameParts[:2]?#..ABC*XYZ...

??returnchFirstName,chLastName

分割英文名就很简单了,空格分开,第一部分是名,第二部分是姓,其他情况暂时不管就行。

pandas如何统计excel中列数据的行数?

准备测试数据:

测试数据

打开PyCharm输入以下代码

程序代码

运行效果如下:

运行效果展示

附上实现代码:

#!/usr/bin/envpython

importpandasaspd

OPENPATH='test.xls'

SAVEPATH='test1.xls'

deftotal_count(path=OPENPATH,sheetname='testsheet'):

df=pd.read_excel(path,sheet_name=sheetname,names=['值','计数'])

#获取统计项目

item_name=set(df['值'])

#创建字典统计

total_dict=dict(zip([iforiinitem_name],[

0for_inrange(len(item_name))]))

#遍历”值“列,逐个统计数量

forindex,iteminenumerate(df['值']):

#如果在set中

ifiteminitem_name:

#加入计数统计

total_dict[item]+=df['计数'][index]

#返回

returntotal_dict

defdatato_excel(path=SAVEPATH,sheet_name='total',data_dict={}):

report_df=pd.DataFrame.from_dict(data_dict,orient='index')

xl_writer=pd.ExcelWriter(path)

report_df.to_excel(xl_writer,sheet_name)

try:

xl_writer.save()

print('Savecompleted')

except:

print('Errorinsavingfile')

if__name__=="__main__":

datato_excel(data_dict=total_count())

不知道这是不是您想要的结果,如果有帮助,请采纳一下,谢谢!

结语:以上就是首席CTO笔记为大家介绍的关于python计算excel有多少行的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑lol突然很卡怎么办啊电脑玩lolfps低怎么解决 危化品仓库有什么设备 香港中文大学2021-2022在河北,重庆最低录取分数线 ChaCheer 洽洽 南瓜子 盐焗味 500g-适用对象 老闫家小粒香南瓜子-适用对象 洽洽盐焗味南瓜子-适用对象 盐焗南瓜子里有添加明矾吗 老街口盐焗味南瓜子500g*2袋量大优惠休闲零食 一天走多少步可以减肥每天走多少步可以减肥 肉炖土豆需要炖多久时间 肝性脑病是什么 诱发肝性脑病的因素有什么 肝性脑病最常见的病因 引起肝性脑病最常见的原因是什么 肝性脑病的发病机制有什么 高考改革会不会取消高三,缩短学制呢? 如何用手判断乳腺增生 男科看哪个科 尿频去医院看什么科 女性疑似尿路感染,尿频尿急尿痛,去医院应该挂什么科,有的说妇科,有的... 承运奉天承运解说 尿频 尿急 尿痛 尿出血去医院看什么科 古代圣旨里的"奉天承运"作何解? 尿频看什么科室 ...想考选调生,想问一下山东省的选调生报名时间一般是多少呢?考试时间... 汽车保险丝烧坏了怎么处理? 不爱发朋友圈自己生活的女人是不是都有男朋友了 一个30岁没结单身的女人,不爱发朋友圈了,是不是有男朋友了 怎么翻译香港地址 F8 Photography, Suite 602, Chao's Building, 143... 香港地址翻译:ADD:Flat/Rm 1005, 10/F Weng Yue Bldg 60-64 Des Voeux... python统计一列多少行(2023年最新整理) 外卖员偷外卖怎么赔偿 义乌灯光节地址 义乌租舞台?音响?灯光哪里有?公司做发布会 义乌市区哪里有灯光球场? 清者自清,浊者自浊,清浊而不,何乐而不为 从江苏辞职后,把社保办了转出手续,自己带着到湖北省后三个月没有找工... 我买的社保关于转移时间过期了,却手续没办完,我在2014年12月份已经把... 跨市办理转移社保,如果超过三个月怎么办? 电脑开机显示自动修复无法修复的错误,怎么办? 中国大学开展思想政治教育有哪些方式方法 深紫色毛线外套里面应该配什么衣服呢? 紫色中袖、及膝的休闲毛线长上衣如何搭配? 紫色的毛线半身长裙搭配什么样的上衣和外套?是上衣还有外套两件的... 紫色大衣怎么搭配(紫色大衣配什么颜色打底) 含有近义词的四字成语越多越好 含近义词的四字成语写多一点, ios能玩的绅士游戏 了不起的修仙模拟器轮回者天命之子:神秘主角身世揭秘 什么背包最旺财运