Python:Excel数据转TXT(16进制)

1 博客内容

      练手任务,需要将约100份Excel文件固定列数据转16进制,该列中每行数据存放一起,生成txt。生成的数据前加固定的Information及原excel名称为编号。程序实现提取excel固定列数据转16进制,并保存为txt。

2 数据转换

      文件存放路径:D:\SoftApp\Python\EOL\H
      文件名及内容:

  • 文件1:XA_1900001.xls,内容:

在这里插入图片描述

  • 文件2:XA_1900002.xls,内容:
    | 在这里插入图片描述
  • 文件3:XA_1900003.xls,内容:
    在这里插入图片描述
    使用Python编程如下:
"""
    名称:  Translation.py
    作者:  Morven_Xie
    版本:  1.0
    时间:  2020/7/21 15:08
    功能:  用于提出excel固定列数据转16进制,并保存为txt文件
    简介: ·提取第6列出具,该列每行数据单位由1变为0.001,保留整数位转16进制;
          ·提取第12列出具,该列每行数据单位由1变为0.01,保留整数位转16进制;
          ·提取excel文件名,截取AAA000_000002.xls中序号部分,作为txt文件名及起始内容;
    Email:  morven_xie@163.com
"""

# coding=utf-8
import os                                 # 用于获取文件路径
import xlrd                               # 用于一次读取Excel中的整行数据

# def delete_bytes_hex(data):             # 备用函数,打印16进制0X2A时取消0X
#     lin = ['%02X' % i for i in data]
#     n = (" ".join(lin))
#     return n

def extract(inpath):                                              # 创建函数
    data = xlrd.open_workbook(inpath, encoding_override='utf-8')  # 打开指定地址excel
    table = data.sheets()[0]                                      # 打开索引顺序获取excel
    nrows = table.nrows                                           # 获取行号
    ncols = table.ncols                                           # 获取列号
    exfile=open('A_transition.txt', "w")                          # W为清空原txt内容重新写入
    for i in range(5, nrows):                                     # 循环输出excel表中每一行,即所有数据
        datas_row = table.row_values(i)                           # 循环输出excel表中每一行,所有列的数据
        if i%50 !=0:                                              # 取消表中某一行不读取
            k= int(round(float(datas_row[1]), 3)*1000)            # 提取某i行第二列数据取整,转化为int类型
            m = hex(k)                                            # 10进制转16进制
            result = (format(k, "x").zfill(4))                    # 不足4位的前面补充0
            exfile.write(result)                                  # 16进制数据写入transition.txt
    for i in range(5, nrows):                                     # 同上,第0到4行为表头,从第5行开始
        datas_row = table.row_values(i)
        if i % 50 != 0:
            if isinstance(datas_row[5], str):                     # 判断单元格内容是否为空
                n = 0                                             # 为空则输出0
            else:
                n = datas_row[5]                                  # 为不为空则输出实际值
            k = int(round(float(n), 2) * 100)                     # n取小数点后两位小数,单位转化0.01
            m = hex(k)                                            # 10进制转16进制
            result = (format(k, "x").zfill(4))                    # 同上
            exfile.write(result)                                  # 16进制数据写入transition.txt
    exfile.write('_B8B8')                                         # 加入特定结尾字符串
    exfile.close()                                                # 关闭transition.txt


file_path = "D:\SoftApp\Python\EOL\H"                            # 文件所在文件夹
for root, dirs, files in os.walk(file_path):                     # os.walk返回三个对象: dirpath(目录路径,string类型)
                                                                 # dirname(多个子目录名,列表); filename(多个文件名,列表)
    path = [os.path.join(root, name) for name in files]          # 遍历文件名对应的地址(3个文件地址)
for file_adress in path:                                         # 如果地址为真(不为空)
    extract(file_adress)                                         # 调用def extract(inpath)函数
    filename=str(file_adress.split('\\')[-1].split('.')[0])      # 提取地址中文件名
    with open(filename + ".txt", 'a') as f:                      # 新建txt,且其名称来自excel名称
        f.write('Info_XA_AA001_'+str(filename)+'_')                  # 将固定信息先写入txt中
        if __name__ == '__main__':                               # 拷贝函数的txt文件内容,追加到新txt
            fp = open('A_transition.txt', 'r')
            for line in fp:
                f.write(line)
    fp.close()                                                  # 关闭文件
    f.close()
os.remove('A_transition.txt')                                   # 移除中转文件

      运行结果:

XA_1900001.txt,内容:
Info_XA_AA001_XA_1900001_00320014001e00280032003c00460050005a0064006e00780082008c009600a000aa00b400be00c8000a0003000500500007002b0095035303a3034802da03510411041b04e304e4000000000000000000000000_B8B8

XA_1900002.txt,内容:
Info_XA_AA001_XA_1900002_0014000000000000000003d91f46226a1ed91a8d1f3326b327182ee82ef22efc2f062f102f1a2f24001400020000000000000000006203210371031602a8031f03df03e904b104b2000000000000000000000000_B8B8

XA_1900003.txt,内容:
Info_XA_AA001_XA_1900003_001e000000000000000003d91f46226a1ed91a8d1f3326b327182ee82ef22efc2f062f102f1a2f24001e00030000000000000000006203210371031602a8031f03df03e904b104b2000000000000000000000000_B8B8

>> 更多相关内容,点击Morven_Xie博客概览

  • 0
    点赞
  • 1
    收藏 更改收藏夹
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morven_X

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值