鱼C论坛

 找回密码
 立即注册
查看: 1902|回复: 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:
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 表格

打包好的文件:
gitlog.rar (1.84 KB, 下载次数: 1)
微信图片_20230308085954.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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:首先用一个小文件(比如只有你示例文本中的两段)测试上述所有的流程,保证结果是你要的,我们再将第一步的文件换成你的处理目标
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 表格

打包好的文件:
gitlog.rar (1.84 KB, 下载次数: 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

首先要安装 textfsm:

谢谢鱼友的回复,弄出来了,只需安装了textfsm和openpyxl两个模块和改了py文件的文件名和开头,所以炒写很快,但是菜鸟一定会吃透的,感谢,非常感谢~
#!/bin/python
# -*- coding:utf-8 -*-
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 09:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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