
前天准备休息了,忽然一个朋友过来询问能不能帮他一个小忙。他那边有一个需求:一张Excel表格,第一列是各个学校的名字,第二列是密码,他们希望根据第一列学校的名字随机来生成一个hash值来填充第二列的密码,并且要求是随机的8位数。他觉得一个个来太麻烦了,他问我能不能帮他用Python批量处理下。

这里我们使用pandas和openpyxl库。Pandas可以处理各种格式的数据,包括CSV、TXT等,但默认读写Excel文件需要额外的支持。openpyxl是一个Python库,用于读取和写入Excel 2010 xlsx/xlsm/xltx/xltm 文件。当你使用Pandas来读写Excel (.xlsx) 文件时,Openpyxl是一个常用的后端引擎。
一、我们先安装下pandas和openpyxl
pip install pandas openpyxl
二、写一个简单的Python脚本处理:
这是一个简单实现示例,大家参考下,抛砖引玉。
import pandas as pdimport hashlibdef generate_8_digit_school_name(school_name):# 使用SHA-256哈希算法hash_object = hashlib.sha256(school_name.encode())hash_hex = hash_object.hexdigest()# 将哈希值转换为一个整数hash_int = int(hash_hex, 16)# 通过模运算获取8位数字eight_digit_number = hash_int % 100000000# 格式化为8位数字,不足8位前面补0eight_digit_number_formatted = str(eight_digit_number).zfill(8)return eight_digit_number_formatted# 读取Excel文件df = pd.read_excel('学校信息.xlsx') # 假设Excel文件名为'学校信息.xlsx'# 检查'学校'列是否存在if '学校' in df.columns:# 应用函数生成8位数字哈希值,并覆盖或新增为'密码'列df['密码'] = df['学校'].apply(generate_8_digit_school_name)else:print("错误:Excel文件中未找到'学校'列。")# 输出到新的Excel文件df.to_excel('学校及8位密码哈希值.xlsx', index=False) # 新文件名为'学校及8位密码哈希值.xlsx'print("处理完成,8位密码哈希值已保存至新Excel文件。")
三、这个脚本简单分为了下面几个步骤:
1.导入pandas用于数据处理以及hashlib用于实现SHA-256哈希计算。
2.定义函数 generate_8_digit_school_name:这个函数接收一个学校名称作为输入,然后执行以下操作:使用SHA-256算法对学校名称进行哈希计算。将得到的哈希值(十六进制字符串)转换成整数。通过模运算hash_int % 100000000确保结果是一个八位数。最后,将这个数字格式化为8位字符串,如果不足8位则在前面补零。
3.读取Excel文件:使用pd.read_excel读取名为学校信息.xlsx的Excel文件到DataFrame中。
4.检查并应用函数:检查DataFrame中是否有学校这一列。如果有,则对该列中的每个学校名称应用generate_8_digit_school_name函数,生成的8位数字作为“密码”列保存;如果没有找到学校列,则打印错误信息。
5.输出到新Excel文件:将处理后的DataFrame(包含原始信息和新生成的密码列)写入一个新的Excel文件,名为学校及8位密码哈希值.xlsx,index=False表示不保存行索引。
6.完成提示:处理完成后,打印一条消息告知操作成功,并说明8位密码哈希值已保存至新文件。





