文本如下
:BEGIN
"SN" "1"
"Machine" "1246"
"Nonumber" "11111"
FAI1 2.615 2.61 0.01 0.01 0.005
FAI6 1.998 2 0 0.01 0.002
FAI2 5.997 6.0 0 0.01 0.003
FAI3_2 0.102 0.1 0.02 0.02 0.002
FAI3_1 0.098 0.1 0.02 0.02 0.002
FAI4 3.998 4 0 0.01 0.002
:END
:BEGIN
"SN" "2"
"Machine" "1246"
"Nonumber" "11111"
FAI1 2.612 2.61 0.01 0.01 0.005
FAI6 1.996 2 0 0.01 0.004
FAI2 5.998 6.0 0 0.01 0.002
FAI3_2 0.099 0.1 0.02 0.02 0.001
FAI3_1 0.097 0.1 0.02 0.02 0.003
FAI4 3.995 4 0 0.01 0.005
:END
:BEGIN
"SN" "3"
"Machine" "1246"
"Nonumber" "11111"
FAI1 2.613 2.61 0.01 0.01 0.005
FAI6 1.999 2 0 0.01 0.001
FAI2 5.996 6.0 0 0.01 0.004
FAI3_2 0.105 0.1 0.02 0.02 0.005
FAI3_1 0.101 0.1 0.02 0.02 0.001
FAI4 3.997 4 0 0.01 0.003
:END
:BEGIN
"SN" "4"
"Machine" "1246"
"Nonumber" "11111"
FAI1 2.611 2.61 0.01 0.01 0.005
FAI6 1.997 2 0 0.01 0.003
FAI2 5.998 6.0 0 0.01 0.002
FAI3_2 0.098 0.1 0.02 0.02 0.002
FAI3_1 0.096 0.1 0.02 0.02 0.004
FAI4 3.999 4 0 0.01 -0.002
:END
想转换的格式是,按SN为列将后面重复的行转换到列上去,如下:
1 2 3 4
FAI1 2.615 2.612 2.613 2.611
FAI6 1.998 1.996 1.999 1.997
FAI2 5.997 5.998 5.996 5.998
FAI3_2 0.102 0.099 0.105 0.098
FAI3_1 0.098 0.097 0.101 0.096
FAI4 3.998 3.995 3.997 3.999
谢谢各位,已知格式是固定的,每一份样本数据是一:BEGIN开头,以:END结束,如果不知道,其中数据的行数该如何排列。
请教各位,我有一份txt文档,里面包含重复的样本数据,怎么用Python将齐转换为我想要的格式
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- CSDN专家-文盲老顾 2022-04-01 15:12关注
import re a = ''':BEGIN "SN" "1" "Machine" "1246" "Nonumber" "11111" FAI1 2.615 2.61 0.01 0.01 0.005 FAI6 1.998 2 0 0.01 0.002 FAI2 5.997 6.0 0 0.01 0.003 FAI3_2 0.102 0.1 0.02 0.02 0.002 FAI3_1 0.098 0.1 0.02 0.02 0.002 FAI4 3.998 4 0 0.01 0.002 :END :BEGIN "SN" "2" "Machine" "1246" "Nonumber" "11111" FAI1 2.612 2.61 0.01 0.01 0.005 FAI6 1.996 2 0 0.01 0.004 FAI2 5.998 6.0 0 0.01 0.002 FAI3_2 0.099 0.1 0.02 0.02 0.001 FAI3_1 0.097 0.1 0.02 0.02 0.003 FAI4 3.995 4 0 0.01 0.005 :END :BEGIN "SN" "3" "Machine" "1246" "Nonumber" "11111" FAI1 2.613 2.61 0.01 0.01 0.005 FAI6 1.999 2 0 0.01 0.001 FAI2 5.996 6.0 0 0.01 0.004 FAI3_2 0.105 0.1 0.02 0.02 0.005 FAI3_1 0.101 0.1 0.02 0.02 0.001 FAI4 3.997 4 0 0.01 0.003 :END :BEGIN "SN" "4" "Machine" "1246" "Nonumber" "11111" FAI1 2.611 2.61 0.01 0.01 0.005 FAI6 1.997 2 0 0.01 0.003 FAI2 5.998 6.0 0 0.01 0.002 FAI3_2 0.098 0.1 0.02 0.02 0.002 FAI3_1 0.096 0.1 0.02 0.02 0.004 FAI4 3.999 4 0 0.01 -0.002 :END''' b = re.findall(':BEGIN[\s\S]*?(?=:BEGIN|$)',a) z = {} for m in b: '''使用正则获取Machine数据''' mach = re.search('(?<="Machine" ")(\d+)',m).group() '''如果Machine不存在于集合中,增加集合子项''' if mach not in z.keys(): z[mach] = {} '''使用正则获取SN数据''' sn = re.search('(?<="SN" ")(\d+)',m).group() '''使用正则获取各行数据,以数字结尾的行为数据行''' n = re.findall('[^\r\n]+\d(?=[\r\n]|$)',m) '''对各行数据循环''' for r in n: '''使用split切分各行各自的数据''' fai = r.split(' ') if fai[0] not in z[mach].keys(): z[mach][fai[0]] = {} z[mach][fai[0]][sn] = fai[1:] print(z) for m in z.keys(): print(m) for fai in z[m]: print(''.rjust(8),end='') for sn in z[m][fai]: print(sn.rjust(8),end='') print() break for fai in z[m]: print(fai.rjust(8),end='') for sn in z[m][fai]: print(z[m][fai][sn][0].rjust(8),end='') print()
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 表达式必须是可修改的左值
- ¥15 如何绘制动力学系统的相图
- ¥15 对接wps接口实现获取元数据
- ¥20 给自己本科IT专业毕业的妹m找个实习工作
- ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
- ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
- ¥50 mac mini外接显示器 画质字体模糊
- ¥15 TLS1.2协议通信解密
- ¥40 图书信息管理系统程序编写
- ¥20 Qcustomplot缩小曲线形状问题