python处理excel文件
程序员文章站
2022-07-13 10:58:12
...
电子表格求和
问题描述
对如图中所示数据(截取了部分,真实数据达100万行),对每一个timeid=xxxx
,统计其对应记录第四列之和
最后输出如 timeid=xxxx sum
这样的形式
分析
- 数据量非常大,不适合手动用excel自带的求和功能进行处理。
- 不熟悉excel的自带求和函数的编写,遂用python进行处理
- 数据格式比较简单,由于每一个
timeid=xxxx
对应的记录数目不一定相同,不能直接通过设置每一个timeid=xxxx
对应记录行数来进行求和。
编码
版本:python3.6
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
import xlrd
#保存结果
save_file_name="res.txt"
#待处理数据
origin_file_name="main.xlsx"
#保存结果
res=[]
#统计每一个timeid对应的和
tmp_sum=0.0
last_title="first"
#读入数据
wb = xlrd.open_workbook(origin_file_name)
#打开对应表
table = wb.sheet_by_index(0)
#行、列
nrows = table.nrows
ncols = table.ncols
#遍历行
for index in range(0,nrows):
#line
lines=table.row_values(index)
#获取第一个字段
first_field=lines[0]
#碰到"timeid=xxxx"这样的行
if(str(first_field).find("timeid")!=-1):
current_title=str(first_field)
if(title!=last_title):
#不记录第一个虚timeid
if(last_title!="first"):
#添加到列表
tmp_res=[last_title,round(tmp_sum,2)]
res.append(tmp_res)
#替换标签,清零
last_title=current_title
tmp_sum=0.0
else:
try:
#统计和
value=float(lines[3])
tmp_sum+=value
except Exception as E:
print("当前行: "+str(index))
print(str(lines[3]))
#保存最后一个
if(index==(nrows-1)):
tmp_res=[last_title,tmp_sum]
res.append(tmp_res)
#保存结果到文件
with open(save_file_name,"w") as f:
for value in res:
f.write(str(value[0])+"\t")
f.write(str(value[1]))
f.write("\n")
结果
测试结果与实际结果相符合
瞎扯
- 如果数据存储格式为B,标签在对应记录下方,处理流程是:遇到标签行时,记录行和对应记录和。
- 如果为A,如本例,就相对麻烦一点。当然,如果从后往前处理,则同B。如果从上往下处理,就要注意碰到每一个Tag时处理方式的统一性了。
PS:Anoconda对新手非常友好,自带了excel处理模块xlrd,能让我们专心于问题本身。
上一篇: Python之文件处理
下一篇: python基础文件处理