Python实战项目总结

本文介绍了如何使用Python的openpyxl库处理Excel文件,通过for循环实现将'超市营业额2.xlsx'中工号前加数字操作,然后将结果写入新的'超市营业额2_修改工号.xlsx'。涉及了读取文件、数据筛选与修改、以及写入新文件的过程。
摘要由CSDN通过智能技术生成

Python实战项目总结

项目:处理超市营业额。
题目:一:已知文件“超市营业额2.xlsx”,将所有员工的工号前面增加一位数字,增加的数字和原工号最后一位相同,把修改好的数据写入新文件“超市营业额2_修改工号.xlsx”。例如,工号1001改为11001,1003改为31003。

1:如何实现对工号的修改:

观察发现可以将工号除以10的余数乘1000,再加上原来的工号。
即:new_num=(old_num)%10*10000+old_num

2:如何处理xlsx文件:

使用openyxl模块。

wb=openpyxl.load_workbook('超市营业额2.xlsx')   #打开表格文件
worksheet=wb["Sheet1"]    #访问工作表Sheet1

3:如何遍历特定的行或列?

笔者目前正在学pandas,还未初步掌握,所以在这里采用暴力for循环方式。

for i in list(worksheet.columns)[0]:
    if i.value!='工号':
        new_num = int(i.value) % 10*10000+int(i.value)
        new_num_list.append(new_num)

引申:获取特定行或列的方式:
我们可以想到的是用“索引”的方式,但是sheet.rows是生成器类型,不能使用索引。所以我们将其转换为list之后再使用索引,例如用list(sheet.rows)[3]来获取第四行的tuple对象。

#输出特定的行
for cell in list(worksheet.rows)[3]:  #获取第四行的数据
    print(cell.value,end=" ")
print()
#河北省 1514.7 2039.6 107.7 139.8 915.5 167.9 531.7 115.8 285.7 265.4 166.3 47.0
 
#输出特定的列
for cell in list(worksheet.columns)[2]:  #获取第三列的数据
    print(cell.value,end=" ")
print()
#家庭经营纯收入 1957.1 2707.4 2039.6 1622.9 2406.2 2210.8 2556.7 2521.5 767.7 2271.4 3084.3……
 
#已经转换成list类型,自然是从0开始计数。

PS:引申部分摘编自TheGkenoe博主的文章。

4:如何写入新的文件?

newworksheet.cell(j + 1, 2, new_name_list[j])

for j in range(len(new_num_list)):
    newworksheet.cell(j + 1, 1, new_num_list[j])  #写入变更后的数据,j+1表示行数,1为列数。
    newworksheet.cell(j + 1, 2, new_name_list[j])
    newworksheet.cell(j + 1, 3, new_date_list[j])
    newworksheet.cell(j + 1, 4, new_time_list[j])
    newworksheet.cell(j + 1, 5, new_sales_list[j])
    newworksheet.cell(j + 1, 6, new_kind_list[j])

完整代码如下:

'''超市营业额处理之工号修改'''
import openpyxl
wb=openpyxl.load_workbook('超市营业额2.xlsx')   #打开表格文件
worksheet=wb["Sheet1"]    #访问工作表Sheet1
new_num_list=['工号']    #定义新的列表用来存储改变后的数据
new_name_list=['姓名']
new_date_list=['日期']
new_time_list=['时段']
new_sales_list=['交易额']
new_kind_list=['柜台']


wb2=openpyxl.Workbook()
newworksheet=wb2.active
newworksheet.title="New Sheet1"


for i in list(worksheet.columns)[0]:
    if i.value!='工号':
        new_num = int(i.value) % 10*10000+int(i.value)
        new_num_list.append(new_num)
for i in list(worksheet.columns)[1]:
    if i.value!='姓名':
        new_name_list.append(i.value)
for i in list(worksheet.columns)[2]:
    if i.value!='日期':
        new_date_list.append(i.value)
for i in list(worksheet.columns)[3]:
    if i.value!='时段':
        new_time_list.append(i.value)
for i in list(worksheet.columns)[4]:
    if i.value!='交易额':
        new_sales_list.append(i.value)
for i in list(worksheet.columns)[5]:
    if i.value!='柜台':
        new_kind_list.append(i.value)

for j in range(len(new_num_list)):
    newworksheet.cell(j + 1, 1, new_num_list[j])  #写入变更后的数据,j+1表示行数,1为列数。
    newworksheet.cell(j + 1, 2, new_name_list[j])
    newworksheet.cell(j + 1, 3, new_date_list[j])
    newworksheet.cell(j + 1, 4, new_time_list[j])
    newworksheet.cell(j + 1, 5, new_sales_list[j])
    newworksheet.cell(j + 1, 6, new_kind_list[j])
wb2.save(filename='超市营业额2_修改工号.xlsx')

原图:

在这里插入图片描述

效果图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值