暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用Python读取Excel表格列,并生成新的一列8位hash值

运维笔谈 2024-09-13
410

前天准备休息了,忽然一个朋友过来询问能不能帮他一个小忙。他那边有一个需求:一张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 pd
      import hashlib


      def 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位前面补0
      eight_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位密码哈希值已保存至新文件。


      文章转载自运维笔谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论