liyuping-fisher 发表于 2023-3-8 09:00:57

求用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

逄逄 发表于 2023-3-8 09:44:04

提供一个思路:
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:首先用一个小文件(比如只有你示例文本中的两段)测试上述所有的流程,保证结果是你要的,我们再将第一步的文件换成你的处理目标

isdkz 发表于 2023-3-8 14:16:32

这种半结构化的数据可以用到谷歌开源的一个 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 表格

打包好的文件:

liyuping-fisher 发表于 2023-3-9 09:07:53

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

特别感谢亲的回复,我是小白,可能就懂一点点知识,所以要通过做项目去进步,思路是好的,但是我估计自己还搞不出来,等我后面也用这种方法做一遍,谢谢~

liyuping-fisher 发表于 2023-3-9 09:09:49

isdkz 发表于 2023-3-8 14:16
这种半结构化的数据可以用到谷歌开源的一个 python 模块 textfsm,

首先要安装 textfsm:


谢谢鱼友的回复,弄出来了,只需安装了textfsm和openpyxl两个模块和改了py文件的文件名和开头,所以炒写很快,但是菜鸟一定会吃透的,感谢,非常感谢~
#!/bin/python
# -*- coding:utf-8 -*-
页: [1]
查看完整版本: 求用python将txt转excel方法