Python新手接了第一个副业单子,2小时完成:Python修正excel表格数据
Posted 学Python的阿杜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python新手接了第一个副业单子,2小时完成:Python修正excel表格数据相关的知识,希望对你有一定的参考价值。
一、前言
大家好,今天我来介绍一下我接的第一个Python单子。我完成这个单子前后不到2小时。
首先我接到这个单子的想法是处理Excel表,在两个表之间建立联系,并通过项目需求,修改excel表中的数据。我是运用面向过程写的,将每一步都放在了不同的函数中,下面让我来介绍一下我是怎么通过自己的思路一步一步完成的。
做完单子后,老师很快就给我转账了,并且没有二次修改,感觉很省心:
投稿这篇文章后,老师又给我50元稿费:
先上客户的需求
二、代码实现及讲解
- 模块的导入
主要用到的模块为openpyxl、random
import openpyxl
import random
from openpyxl.utils.cell import get_column_letter,column_index_from_string
除了运用到openpyxl和random还用到了openpyxl中的utils包下cell模块的两个方法,第一个方法get_column_letter的作用是将整型转换为对应excel中列属性的字符串,例如:12转换为L,50转换为AX
第二个方法是将字符串转换为整型,其本质类似于10进制和27进制之间的转换,当然你也可以自己写,下面附上自己写的行(整型)转换为列(字符串)的代码。
def num_to_string(n):
column = n - 1
real_colum = ''
while column >= 26:
value = column // 26
column = column % 26
real_colum += chr(value + 64)
real_colum += chr(column + 65)
return real_colum
2.获取“数据原表”中数据
#创建一个全局变量MATERIAL_MESSAGE
MATERIAL_MESSAGE = []
#获取小宛中数据
def get_construct_message():
#读取数据原表.xlsx表
wb = openpyxl.load_workbook('数据原表.xlsx')
#获取获取当前活动工作表,默认为第一个表
ws = wb.active
#获取在生产记录更新.xlsx中的可以用到的数据存入MATERIAL_MESSAGE中
for row in range(1,ws.max_row + 1):
if ws[f'Arow'].value == '日期':
for i in range(ord('B'),ord('I')):
material = []
#将日期转换为与生产记录更新中相对应写法的形式
date = ws[f'Brow'].value.translate(str.maketrans('年月','--'))
date = date.replace('号','')
material.append(date)
i = chr(i)
material.append(ws[f'irow + 1'].value)
material.append(ws[f'irow + 3'].value)
MATERIAL_MESSAGE.append(material)
print(MATERIAL_MESSAGE)
3.获取生产记录更新表中的日期和材料
# 将客户要求的对应数据存入字典中
TABLES = "水泥":"水泥1","粉煤灰":"煤灰","河沙":"沙1","粗骨料1":"石1","粗骨料2":"石2","减水剂":"外加剂","水":"水"
#存入生产记录更新表的日期和其所在的行数
DATE = []
#存入生产记录更新表的材料和其所在的列数
MATERIAL = []
wb = openpyxl.load_workbook('生产记录更新.xlsx')
ws = wb.active
#获取日期
def get_date():
for row in range(3,ws.max_row + 1):
#将日期进行分割合并转换成与MATERIAL_MESSAGE中对应日期的格式
date = str(ws[f'Brow'].value).split()[0]
date_list = date.split('-')
if '0' in date_list[1]:
date_list[1] = date_list[1].replace('0','')
if '0' in date_list[2]:
date_list[2] = date_list[2].replace('0','')
date = '-'.join(date_list)
DATE.append([date,row])
pprint.pprint(DATE)
#获取材料
def get_material():
n = 0
for column in ws[1]:
n += 1
#判断该单元格的内容是否在TABLES中
if column.value in TABLES.values():
#运用行列转换的方法进行转换
MATERIAL.append([column.value,get_column_letter(n - 1)])
pprint.pprint(MATERIAL)
DATE表部分数据
MATERIAL表数据
4.对生产数据更新表中数据的修改
#两个参数分别为材料的类型和所在的列数
def update_default(matrial,letter):
for row in range(3,ws.max_row + 1):
#判断单元格是否为空
if ws[f'letterrow'].value != None:
for i in range(len(MATERIAL_MESSAGE)):
#需求条件,要将连个表中的日期和材料类型进行一一对应
if DATE[row-3][0] == MATERIAL_MESSAGE[i][0] and matrial == TABLES[MATERIAL_MESSAGE[i][1]]:
#修改形参letter对应列的每个符号要求的单元格对应的设定值
ws[f'letterDATE[row - 3][1]'].value = MATERIAL_MESSAGE[i][2]
#分别获取该列列号的下两列对应的列号
letter_random = get_column_letter(column_index_from_string(letter) + 2)
letter_real = get_column_letter(column_index_from_string(letter) + 1)
#判断该列是否在这三列中,若在其中则得到-2到2之间的随机数,否则-1到1之间的随机数,并更新误差值
if letter in ('AV','BB','BE'):
ws[f'letter_randomDATE[row - 3][1]'].value = round(random.uniform(-2, 2), 1)
else:
ws[f'letter_randomDATE[row - 3][1]'].value = round(random.uniform(-1, 1), 1)
#运用设定值和误差值更新中间的实际值
ws[f'letter_realDATE[row - 3][1]'].value = round(ws[f'letterDATE[row - 3][1]'].value * (1 + ws[f'letter_randomDATE[row - 3][1]'].value * 0.01),2)
5.最后,调用函数并保存数据
def main():
get_construct_message()
get_date()
get_material()
for i in MATERIAL:
update_default(i[0],i[1])
wb.save('生产记录更新.xlsx')
if __name__ == "__main__":
main()
三、效果展示
修改前部分数据
修改后部分数据
四、结尾
通过自己的的两个小时的努力奋战完成了这个单子,总的来说,难度不在于怎么修改数据,而是在于怎么把两个表相互关联,通过这次接单让我对excel表能够更加熟练地进行操作,接单既能提升自己的能力,又能赚点外快,何乐而不为呢。
想要追赶Python的热潮,却无门路?
门槛低、薪资高、发展好… Python+大数据开发作为2022年最有“钱途”的岗位之一 ,是很多应届生和转行小伙伴们的首选。
学习 Python门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。
Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…
这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
上述这份完整版的Python全套学习资料已经上传CSDN官方,朋友们如果需要可以直接划到文末免费领取【保证100%免费
】
下面来看看python每个分支知识点的详细内容,以及配套学习文件。
一、Python基础和高级编程
对于新手学Python而言,基础和高级编程这一块是很重要的,因为如果你没有学过它们,直接去学习某个方向,你将会一脸懵逼,所以这是绕不过的,打好这一块的基础之后,你完全可以无障碍地进阶Python的任何方向。
学习资源:
以上所有的文件都已经打包好了,需要的朋友请移步文末。
二、爬虫
应该有很多人都对爬虫感兴趣吧?不只是Python可以写爬虫,还有很多语言都能写,但Python是公认的最适合的语言了。
爬虫不只是爬虫工程师会用到,业余时间也可以用来爬点自己想要的东西,又或者是做兼职也是可以的,甚至非程序员在工作方面也用得到,比如电商人员爬取大量同行数据来分析出市场的情况,在大量数据的基础上研究新的电商方案。
学习资源:
三、数据分析
数据分析也是当下的一大热门方向,用Python来做的话比其他语言强很多,但往往只会数据分析还是差点意思,如果能具备爬虫能力来爬取数据就更好了。
以上所有的文件都已经打包好了,需要的朋友请移步文末。
四、数据库与大数据开发
五、算法与人工智能
机器学习是人工智能的必经之路,核心就在这里,所以想往人工智能去发展的人,可以学学机器学习,但同时也有个前提,人工智能是公认存在门槛的,应届毕业生不是研究生以上学历或者大学中出类拔萃的人,基本上很难找到工作,所以也请考虑清楚。
学习资料:
六、Python全栈学习路线
以上所有的文件都已经打包好了。愿你们在自学Python的路上顺风顺水、学有所成!
上述这份完整版的Python全套学习资料已经上传CSDN官方,朋友们如果需要可以点击下方CSDN官方认证微信卡片免费领取【保证100%免费
】
以上是关于Python新手接了第一个副业单子,2小时完成:Python修正excel表格数据的主要内容,如果未能解决你的问题,请参考以下文章
程序员自曝接私活:10个月时间接了30多个单子,纯收入40万