鱼C论坛

 找回密码
 立即注册
查看: 2400|回复: 4

[已解决]求用python将txt转excel方法

[复制链接]
发表于 2023-3-8 09:00:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
将如下txt文件转换为excel,要求是GIT_LOG_START到GIT_LOG_END是一组,冒号前面是excel的列标,冒号后面是其下面对应的值
IT_LOG_START
CommitId:6758e44d402109f6b97299f844c55a38fcf67e49
Project:realtek/2885N/kernel/android/R/device/xxx
Branch:2885N
仓库类型:系统修改
【解决问题】:新增W8DP lunch
【提交分类】:新增lunch
【测试注意】:无
【测试结果】:自测通过
【问题单号】:无
【操作类型】:新增
【重要程度】:重要
【影响产品】:W8DP
Change-Id: I6b90a261e734f16841306202d6d321e0017d2f7d
提交人:liyuping
提交日期:Thu Feb 23 16:11:39 2023 +0800
GIT_LOG_END

GIT_LOG_START
CommitId:d155ebb5f5ee794f5868818d09cc4ed98d9c6cee
Project:realtek/2885N/kernel/android/R/device/xxx
Branch:2885N
仓库类型:系统修改
【解决问题】:xxx不进行默认设置zram大小
【提交分类】:/
【测试注意】:/
【测试结果】:/
【问题单号】:/
【操作类型】:/
【重要程度】:/
【影响产品】:2885N
Change-Id: I9fc7fa91921881ea0093c2195841e5dedc4307db
提交人:liyuping
提交日期:Mon Feb 20 10:15:29 2023 +0800
GIT_LOG_END
最佳答案
2023-3-8 14:16:32
这种半结构化的数据可以用到谷歌开源的一个 python 模块 textfsm,

首先要安装 textfsm:
  1. pip install textfsm
复制代码


然后需要操作 excel 表格还得安装 openpyxl:
  1. pip install openpyxl
复制代码


gitlog.txt:
  1. GIT_LOG_START
  2. CommitId:6758e44d402109f6b97299f844c55a38fcf67e49
  3. Project:realtek/2885N/kernel/android/R/device/xxx
  4. Branch:2885N
  5. 仓库类型:系统修改
  6. 【解决问题】:新增W8DP lunch
  7. 【提交分类】:新增lunch
  8. 【测试注意】:无
  9. 【测试结果】:自测通过
  10. 【问题单号】:无
  11. 【操作类型】:新增
  12. 【重要程度】:重要
  13. 【影响产品】:W8DP
  14. Change-Id: I6b90a261e734f16841306202d6d321e0017d2f7d
  15. 提交人:liyuping
  16. 提交日期:Thu Feb 23 16:11:39 2023 +0800
  17. GIT_LOG_END

  18. GIT_LOG_START
  19. CommitId:d155ebb5f5ee794f5868818d09cc4ed98d9c6cee
  20. Project:realtek/2885N/kernel/android/R/device/xxx
  21. Branch:2885N
  22. 仓库类型:系统修改
  23. 【解决问题】:xxx不进行默认设置zram大小
  24. 【提交分类】:/
  25. 【测试注意】:/
  26. 【测试结果】:/
  27. 【问题单号】:/
  28. 【操作类型】:/
  29. 【重要程度】:/
  30. 【影响产品】:2885N
  31. Change-Id: I9fc7fa91921881ea0093c2195841e5dedc4307db
  32. 提交人:liyuping
  33. 提交日期:Mon Feb 20 10:15:29 2023 +0800
  34. GIT_LOG_END
复制代码


根据 git_log.txt 的结构按照 textfsm 的语法规则写一个模板出来,我这里给你写好了

gitlog.template:
  1. Value CommitId (\w+)
  2. Value Project (.+)
  3. Value Branch (\w+)
  4. Value RepositoryType (.+)
  5. Value SolveProblem (.+)
  6. Value TestAttention (.+)
  7. Value TestResult (.+)
  8. Value QuestionNO (.+)
  9. Value OpType (.+)
  10. Value Importance (.+)
  11. Value ImpactPro (.+)
  12. Value Submitter (.+)
  13. Value EntryTime (.+)


  14. Start
  15.   ^GIT_LOG_START -> Record GitLog
  16.   ^GIT_LOG_END

  17. GitLog
  18.   ^CommitId:${CommitId}
  19.   ^Project:${Project}
  20.   ^Branch:${Branch}
  21.   ^仓库类型:${RepositoryType}
  22.   ^【解决问题】:${SolveProblem}
  23.   ^【提交分类】:.*
  24.   ^【测试注意】:${TestAttention}
  25.   ^【测试结果】:${TestResult}
  26.   ^【问题单号】:${QuestionNO}
  27.   ^【操作类型】:${OpType}
  28.   ^【重要程度】:${Importance}
  29.   ^【影响产品】:${ImpactPro}
  30.   ^Change-Id: \w+
  31.   ^提交人:${Submitter}
  32.   ^提交日期:${EntryTime} -> Start
复制代码


以下是参考代码,解释写在注释里了

gitlog.py:
  1. import textfsm                  # 导入textfsm模块
  2. import openpyxl                 # 导入openpyxl模块

  3. # 打开模板文件
  4. template_file = open("gitlog.template")

  5. # 创建一个TextFSM对象,传入模板文件对象
  6. fsm = textfsm.TextFSM(template_file)

  7. # 关闭模板文件
  8. template_file.close()

  9. # 打开要解析的文本文件
  10. text_file = open("gitlog.txt")

  11. # 读取文本内容
  12. text_data = text_file.read()

  13. # 关闭文本文件
  14. text_file.close()

  15. # 使用TextFSM对象的ParseText方法,传入文本内容,返回一个列表
  16. table = fsm.ParseText(text_data)

  17. # 创建一个工作簿对象
  18. wb = openpyxl.Workbook()

  19. # 获取当前活动的工作表对象
  20. ws = wb.active

  21. # 给工作表添加表头
  22. ws.append(
  23.     ["commitid", "Project", "Branch",
  24.     "仓库类型(配置/分支/芯片平台/机型/配屏/上层应用等)",
  25.     "解决问题", "测试注意", "测试结果", "问题单号",
  26.     "操作类型", "重要程度", "影响产品", "提交人", "合入时间"]
  27. )

  28. # 把从 txt 文件解析出来的数据添加到工作表中
  29. for row in table:
  30.     ws.append(row)

  31. # 保存工作簿到文件
  32. wb.save("gitlog.xlsx")
复制代码


运行此python文件即会生成一个 gitlog.xlsx 的 excel 表格

打包好的文件:
gitlog.rar (1.84 KB, 下载次数: 1)
微信图片_20230308085954.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-8 09:44:04 | 显示全部楼层
提供一个思路:
1. 读取你的txt文件,按照空行把文件分成多个部分:
  1. with open('.....', 'r', encoding='utf-8') as fin:
  2.     components = fin.read().split('\n\n')
复制代码

2. 按照你的统一格式,逐个部分处理,比如首先按照换行'\n' split,得到多个【item: value】这样的字符串,再按照':' split,得到item, value的字符串
3. 接下来你可以对你的value做一些类型转换,如果需要的话
4. 你将使用到pandas这个库
4.1 在你的环境中 pip install pandas
4.2 了解pandas如何通过二维数组创建DataFrame(一张和excel长得一样的表格),这一步通过一些知乎、csdn博客你就能快速了解
4.3 将我们从2,3得到的数据组装成这样一个二维数组
4.4 创建DataFrame
4.5 通过pandas库中的to_xlsx(DataFrame, ...)这个函数,把dataframe保存为一张excel表格
Note:首先用一个小文件(比如只有你示例文本中的两段)测试上述所有的流程,保证结果是你要的,我们再将第一步的文件换成你的处理目标
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-8 14:16:32 | 显示全部楼层    本楼为最佳答案   
这种半结构化的数据可以用到谷歌开源的一个 python 模块 textfsm,

首先要安装 textfsm:
  1. pip install textfsm
复制代码


然后需要操作 excel 表格还得安装 openpyxl:
  1. pip install openpyxl
复制代码


gitlog.txt:
  1. GIT_LOG_START
  2. CommitId:6758e44d402109f6b97299f844c55a38fcf67e49
  3. Project:realtek/2885N/kernel/android/R/device/xxx
  4. Branch:2885N
  5. 仓库类型:系统修改
  6. 【解决问题】:新增W8DP lunch
  7. 【提交分类】:新增lunch
  8. 【测试注意】:无
  9. 【测试结果】:自测通过
  10. 【问题单号】:无
  11. 【操作类型】:新增
  12. 【重要程度】:重要
  13. 【影响产品】:W8DP
  14. Change-Id: I6b90a261e734f16841306202d6d321e0017d2f7d
  15. 提交人:liyuping
  16. 提交日期:Thu Feb 23 16:11:39 2023 +0800
  17. GIT_LOG_END

  18. GIT_LOG_START
  19. CommitId:d155ebb5f5ee794f5868818d09cc4ed98d9c6cee
  20. Project:realtek/2885N/kernel/android/R/device/xxx
  21. Branch:2885N
  22. 仓库类型:系统修改
  23. 【解决问题】:xxx不进行默认设置zram大小
  24. 【提交分类】:/
  25. 【测试注意】:/
  26. 【测试结果】:/
  27. 【问题单号】:/
  28. 【操作类型】:/
  29. 【重要程度】:/
  30. 【影响产品】:2885N
  31. Change-Id: I9fc7fa91921881ea0093c2195841e5dedc4307db
  32. 提交人:liyuping
  33. 提交日期:Mon Feb 20 10:15:29 2023 +0800
  34. GIT_LOG_END
复制代码


根据 git_log.txt 的结构按照 textfsm 的语法规则写一个模板出来,我这里给你写好了

gitlog.template:
  1. Value CommitId (\w+)
  2. Value Project (.+)
  3. Value Branch (\w+)
  4. Value RepositoryType (.+)
  5. Value SolveProblem (.+)
  6. Value TestAttention (.+)
  7. Value TestResult (.+)
  8. Value QuestionNO (.+)
  9. Value OpType (.+)
  10. Value Importance (.+)
  11. Value ImpactPro (.+)
  12. Value Submitter (.+)
  13. Value EntryTime (.+)


  14. Start
  15.   ^GIT_LOG_START -> Record GitLog
  16.   ^GIT_LOG_END

  17. GitLog
  18.   ^CommitId:${CommitId}
  19.   ^Project:${Project}
  20.   ^Branch:${Branch}
  21.   ^仓库类型:${RepositoryType}
  22.   ^【解决问题】:${SolveProblem}
  23.   ^【提交分类】:.*
  24.   ^【测试注意】:${TestAttention}
  25.   ^【测试结果】:${TestResult}
  26.   ^【问题单号】:${QuestionNO}
  27.   ^【操作类型】:${OpType}
  28.   ^【重要程度】:${Importance}
  29.   ^【影响产品】:${ImpactPro}
  30.   ^Change-Id: \w+
  31.   ^提交人:${Submitter}
  32.   ^提交日期:${EntryTime} -> Start
复制代码


以下是参考代码,解释写在注释里了

gitlog.py:
  1. import textfsm                  # 导入textfsm模块
  2. import openpyxl                 # 导入openpyxl模块

  3. # 打开模板文件
  4. template_file = open("gitlog.template")

  5. # 创建一个TextFSM对象,传入模板文件对象
  6. fsm = textfsm.TextFSM(template_file)

  7. # 关闭模板文件
  8. template_file.close()

  9. # 打开要解析的文本文件
  10. text_file = open("gitlog.txt")

  11. # 读取文本内容
  12. text_data = text_file.read()

  13. # 关闭文本文件
  14. text_file.close()

  15. # 使用TextFSM对象的ParseText方法,传入文本内容,返回一个列表
  16. table = fsm.ParseText(text_data)

  17. # 创建一个工作簿对象
  18. wb = openpyxl.Workbook()

  19. # 获取当前活动的工作表对象
  20. ws = wb.active

  21. # 给工作表添加表头
  22. ws.append(
  23.     ["commitid", "Project", "Branch",
  24.     "仓库类型(配置/分支/芯片平台/机型/配屏/上层应用等)",
  25.     "解决问题", "测试注意", "测试结果", "问题单号",
  26.     "操作类型", "重要程度", "影响产品", "提交人", "合入时间"]
  27. )

  28. # 把从 txt 文件解析出来的数据添加到工作表中
  29. for row in table:
  30.     ws.append(row)

  31. # 保存工作簿到文件
  32. wb.save("gitlog.xlsx")
复制代码


运行此python文件即会生成一个 gitlog.xlsx 的 excel 表格

打包好的文件:
gitlog.rar (1.84 KB, 下载次数: 1)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-9 09:07:53 | 显示全部楼层
逄逄 发表于 2023-3-8 09:44
提供一个思路:
1. 读取你的txt文件,按照空行把文件分成多个部分:
2. 按照你的统一格式,逐个部分处理, ...

特别感谢亲的回复,我是小白,可能就懂一点点知识,所以要通过做项目去进步,思路是好的,但是我估计自己还搞不出来,等我后面也用这种方法做一遍,谢谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-9 09:09:49 | 显示全部楼层
isdkz 发表于 2023-3-8 14:16
这种半结构化的数据可以用到谷歌开源的一个 python 模块 textfsm,

首先要安装 textfsm:

谢谢鱼友的回复,弄出来了,只需安装了textfsm和openpyxl两个模块和改了py文件的文件名和开头,所以炒写很快,但是菜鸟一定会吃透的,感谢,非常感谢~
  1. #!/bin/python
  2. # -*- coding:utf-8 -*-
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 06:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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