求用python将txt转excel方法
将如下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
提供一个思路:
1. 读取你的txt文件,按照空行把文件分成多个部分:with open('.....', 'r', encoding='utf-8') as fin:
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:首先用一个小文件(比如只有你示例文本中的两段)测试上述所有的流程,保证结果是你要的,我们再将第一步的文件换成你的处理目标 这种半结构化的数据可以用到谷歌开源的一个 python 模块 textfsm,
首先要安装 textfsm:
pip install textfsm
然后需要操作 excel 表格还得安装 openpyxl:
pip install openpyxl
gitlog.txt:
GIT_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
根据 git_log.txt 的结构按照 textfsm 的语法规则写一个模板出来,我这里给你写好了
gitlog.template:
Value CommitId (\w+)
Value Project (.+)
Value Branch (\w+)
Value RepositoryType (.+)
Value SolveProblem (.+)
Value TestAttention (.+)
Value TestResult (.+)
Value QuestionNO (.+)
Value OpType (.+)
Value Importance (.+)
Value ImpactPro (.+)
Value Submitter (.+)
Value EntryTime (.+)
Start
^GIT_LOG_START -> Record GitLog
^GIT_LOG_END
GitLog
^CommitId:${CommitId}
^Project:${Project}
^Branch:${Branch}
^仓库类型:${RepositoryType}
^【解决问题】:${SolveProblem}
^【提交分类】:.*
^【测试注意】:${TestAttention}
^【测试结果】:${TestResult}
^【问题单号】:${QuestionNO}
^【操作类型】:${OpType}
^【重要程度】:${Importance}
^【影响产品】:${ImpactPro}
^Change-Id: \w+
^提交人:${Submitter}
^提交日期:${EntryTime} -> Start
以下是参考代码,解释写在注释里了
gitlog.py:
import textfsm # 导入textfsm模块
import openpyxl # 导入openpyxl模块
# 打开模板文件
template_file = open("gitlog.template")
# 创建一个TextFSM对象,传入模板文件对象
fsm = textfsm.TextFSM(template_file)
# 关闭模板文件
template_file.close()
# 打开要解析的文本文件
text_file = open("gitlog.txt")
# 读取文本内容
text_data = text_file.read()
# 关闭文本文件
text_file.close()
# 使用TextFSM对象的ParseText方法,传入文本内容,返回一个列表
table = fsm.ParseText(text_data)
# 创建一个工作簿对象
wb = openpyxl.Workbook()
# 获取当前活动的工作表对象
ws = wb.active
# 给工作表添加表头
ws.append(
["commitid", "Project", "Branch",
"仓库类型(配置/分支/芯片平台/机型/配屏/上层应用等)",
"解决问题", "测试注意", "测试结果", "问题单号",
"操作类型", "重要程度", "影响产品", "提交人", "合入时间"]
)
# 把从 txt 文件解析出来的数据添加到工作表中
for row in table:
ws.append(row)
# 保存工作簿到文件
wb.save("gitlog.xlsx")
运行此python文件即会生成一个 gitlog.xlsx 的 excel 表格
打包好的文件:
逄逄 发表于 2023-3-8 09:44
提供一个思路:
1. 读取你的txt文件,按照空行把文件分成多个部分:
2. 按照你的统一格式,逐个部分处理, ...
特别感谢亲的回复,我是小白,可能就懂一点点知识,所以要通过做项目去进步,思路是好的,但是我估计自己还搞不出来,等我后面也用这种方法做一遍,谢谢~ isdkz 发表于 2023-3-8 14:16
这种半结构化的数据可以用到谷歌开源的一个 python 模块 textfsm,
首先要安装 textfsm:
谢谢鱼友的回复,弄出来了,只需安装了textfsm和openpyxl两个模块和改了py文件的文件名和开头,所以炒写很快,但是菜鸟一定会吃透的,感谢,非常感谢~
#!/bin/python
# -*- coding:utf-8 -*-
页:
[1]