吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2423|回复: 18
收起左侧

[Python 转载] 文本数据转格式为Excel

[复制链接]
moyz666 发表于 2022-1-25 20:07
本帖最后由 moyz666 于 2022-1-26 13:17 编辑

原因:对象做报表统计工作,需要把每个人发来的信息统计成Excel报给领导,数据格式比较固定,所以做了个自动化处理的工具
功能:将文本文档里的数据按照分隔符写到Excel中
局限:仅限于26个字段内数据[未做26进制转换]
示例数据:
[Asm] 纯文本查看 复制代码
学号:2022001
姓名:肖红
性别:女
准考证号20046666
数学88
英语73
政治68
计算机综合142
学号:2022002
姓名:肖绿
性别:女
准考证号:20045555
数学:78
英语:63
政治:0[作弊]
计算机综合-132
学号-2022003
姓名-肖黄
性别:男
准考证号-20043333
数学-缺考
英语*53
政治*48
计算机综合*122
学号*2022004
姓名*肖黑
性别:男
准考证号:20042222
数学=58
英语=43
政治=38
计算机综合=112
学号=2022005
姓名:肖青
性别:男
准考证号:20041111
数学:87
英语72
政治:67
计算机综合:142
学号:2022006
姓名:肖橙
性别:男
准考证号20046666
数学86
英语71
政治66
计算机综合141
学号2022007
姓名:肖蓝
性别:女
准考证号:20049999
数学:85
英语:缺考
政治:65
计算机综合:146
学号:2022008
姓名:肖紫
性别:女
准考证号:20048887
数学:89
英语:79
政治:69
计算机综合:149

示例结果:【见最后】
[Asm] 纯文本查看 复制代码
[url=]image.png[/url]

Python源码:
[Python] 纯文本查看 复制代码
import re
import xlwings as xw
import os

#需要替换的关键字/词
#原始的关键词
#替换后的关键词切勿与已存在的关键词一致,否则导致数据错误
#前后顺序请务必对齐
Front_key = ['数学']
#替换后的关键词
After_key = ['微积分']

#待读取数据分隔符
#应该为列表
Separator = [':',':','=','*','-']

#每条记录必有关键词以及位于该记录第一行,可重复
Primary_key = '学号'

#数据更正
#print("读取【data.txt】数据中...")
file = open("data.txt","r",encoding='utf-8')
file_index = 0
data_list = []
while True: 

  #获取每行数据
  line = file.readline()

  if line:    

    #替换关键词
    key_index = 0
    for x in Front_key:
      if line.find(x) >= 0:
        line = line.replace(Front_key[key_index], After_key[key_index])
      key_index += 1

    #将修改后的结果存入[data_list]
    data_list.append(line.replace('\n',''))
    file_index += 1

  else:
    break

  #记录上一条信息
  pre_line = line
file.close()

#print(data_list)

#统计字段列表, 统计【记录】条数, 精简数据
Record_count = 0
line = ''
data_list_index = 0
TableHeader = []#表头列表
for line in data_list:
  flag = 0 #用于标记是否存在分隔符

  line = line.replace("\n",'').replace(" ",'')

  #统计表头
  for sep in Separator:
    if line.find(sep) >= 0:
      flag = 1
      if str(line.split(sep, 1)[0]) not in TableHeader:
        dict_key = line.split(sep, 1)[0]
        TableHeader.append(dict_key)
        break
      else:
        break

  if flag == 0:#若没有分隔符则添加分隔符【只针对值为数字型】
    #直接提数
    value = re.findall("\d+",line.replace("\n",'').replace(" ",''))
    #分离tag
    key = line.replace(str(value[0]),'') if value else line
    data_list[data_list_index] = key + Separator[0] + str(value[0]) if value else ''
    #print("补充分隔符:",data_list[data_list_index])
    if str(key) not in TableHeader:
      TableHeader.append(key)
      #拼合数据并写回

  #统计记录数
  for sep in Separator:
    if line.find(sep) >= 0 and str(line.split(sep, 1)[0]) == Primary_key:
      Record_count += 1

  data_list_index += 1

#print("TableHeader:",TableHeader)
#print("Record_count:",Record_count)

#数据字典初始化
data_dict_index = 0
Data_dict = {}
while data_dict_index <= Record_count:
  Data_dict[data_dict_index] = {}
  for key in TableHeader:
    Data_dict[data_dict_index][key] = ''
  data_dict_index += 1

#数据字典填充
data_dict_index = -1
for line in data_list:
  if line.find(Primary_key) >= 0:
    data_dict_index += 1
  for sep in Separator:
    if line.find(sep) >= 0:
      key   = str(line.split(sep, 1)[0])
      value = str(line.split(sep, 1)[1])
      Data_dict[data_dict_index][key] = value


#print("Data_dict:",Data_dict)


#数据最终形态 二维列表
FinalList = [ [0] * (0) for _ in range(Record_count + 1) ]
for R in Data_dict:
  for H in TableHeader:
    if Data_dict[R][Primary_key] and not Data_dict[R][H]:
      Data_dict[R][H] = '0'
    FinalList[R].append(Data_dict[R][H])

#print("FinalList:",FinalList)
#写入表头
app = xw.App()
wb = app.books.add()

#向表格写入表头
i = 0;
for headerName in TableHeader:
  wb.sheets["sheet1"].range(chr(65 + i) + '1').value = headerName
  i += 1

#向表格写入数据
FinalList_R_index = 2
for R in FinalList:
  FinalList_H_index = 0
  for H in R:
    wb.sheets["sheet1"].range(chr(65 + FinalList_H_index) + str(FinalList_R_index)).value = H
    FinalList_H_index += 1
  FinalList_R_index += 1

#自动调整单元格大小
wb.sheets["sheet1"].autofit()
image.png

免费评分

参与人数 1吾爱币 +1 收起 理由
kk1212 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| moyz666 发表于 2022-1-26 13:18
ouzhzh 发表于 2022-1-26 09:40
想下载才发现,只有代码没有成品。

木有写界面,也木有做配置文件,比如分隔符 关键词啥的都得改代码,所以打包意义不大,你要是有固定需求我可以帮你打包下
 楼主| moyz666 发表于 2022-1-26 13:08
1e3e 发表于 2022-1-25 23:14
可惜只能windows下运行,linux下运行不了,可惜了

Linux安装MSofiice了吗,我木有试过别的系统
Louis_cllc 发表于 2022-1-25 22:46
1e3e 发表于 2022-1-25 23:14
可惜只能windows下运行,linux下运行不了,可惜了
zljiscx 发表于 2022-1-25 23:16
学习了,谢谢分享
头像被屏蔽
tl;dr 发表于 2022-1-26 07:12
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽
tlf 发表于 2022-1-26 08:35
提示: 作者被禁止或删除 内容自动屏蔽
qishing 发表于 2022-1-26 08:38
谢谢楼主分享
王月半 发表于 2022-1-26 08:49
可以学习下
DrCatcher 发表于 2022-1-26 09:08
1e3e 发表于 2022-1-25 23:14
可惜只能windows下运行,linux下运行不了,可惜了

大哥,python不就是跨平台的吗
hhxx23 发表于 2022-1-26 09:21
这个比较方便,可以试试看
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表