鱼C论坛

 找回密码
 立即注册
查看: 181|回复: 1

[已解决]求清洗数据

[复制链接]
发表于 2024-7-6 20:32:00 | 显示全部楼层 |阅读模式
25鱼币
输入
data = """
03011MEA23EM002------ADI1R,03011MEA23EM001------ADI1R
03021MEA23EM002------ADI1R,03021MEA23EM001------ADI1R
03031MEA23EM002------ADI1R,03031MEA23EM001------ADI1R
03041MEA23EM002------ADI1R,03041MEA23EM001------ADI1R
03052MEA23EM002------ADI1LOC,03052MEA23EM001------ADI1R
03062MEA23EM002------ADI1LOC,03062MEA23EM001------ADI1R
03072MEA23EM002------ADI1LOC,03072MEA23EM001------ADI1R
03082MEA23EM002------ADI1LOC,03082MEA23EM001------ADI1R
"""

输出结果:
<1>所有的数据共有部分:
030[0]MEA23EM002------ADI1[1],030[2]MEA23EM001------ADI1R
<2>每条数据不一样的元素
11,R,11
21,R,21
31,R,31
41,R,41
52,LOC,52
62,LOC,62
72,LOC,72
82,LOC,82

这个是数据要进行清洗,我自己好多边都没实现。
030[0]MEA23EM002------ADI1[1],030[2]MEA23EM001------ADI1R,这个是数组里的通配公式。里面的[0][1][2]就是纯粹的占位符。
例如把11,R,11代入通配公式,就能得到数组里第一条数据,依次类推。
有没有同学能不能帮我写个python,用来清洗数据。输出的结果,第一要有通配公式,第二,就是要有数组里的每条数据不同的值。
最佳答案
2024-7-6 20:32:01
import re

data = """
03011MEA23EM002------ADI1R,03011MEA23EM001------ADI1R
03021MEA23EM002------ADI1R,03021MEA23EM001------ADI1R
03031MEA23EM002------ADI1R,03031MEA23EM001------ADI1R
03041MEA23EM002------ADI1R,03041MEA23EM001------ADI1R
03052MEA23EM002------ADI1LOC,03052MEA23EM001------ADI1R
03062MEA23EM002------ADI1LOC,03062MEA23EM001------ADI1R
03072MEA23EM002------ADI1LOC,03072MEA23EM001------ADI1R
03082MEA23EM002------ADI1LOC,03082MEA23EM001------ADI1R
"""

lines = data.strip().split('\n')
common_tmp = r'030(\d{2})MEA23EM002------ADI1([A-Z]+),030(\d{2})MEA23EM001------ADI1R'
pattern = re.compile(common_tmp)
print("匹配公式:", common_tmp)
unique_parts = []
for line in lines:
    match = pattern.match(line)
    if match:
        unique_parts.append(', '.join(match.groups()))

print("\n获取不同数据结果: ")
for part in unique_parts:
    print(part)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-6 20:32:01 | 显示全部楼层    本楼为最佳答案   
import re

data = """
03011MEA23EM002------ADI1R,03011MEA23EM001------ADI1R
03021MEA23EM002------ADI1R,03021MEA23EM001------ADI1R
03031MEA23EM002------ADI1R,03031MEA23EM001------ADI1R
03041MEA23EM002------ADI1R,03041MEA23EM001------ADI1R
03052MEA23EM002------ADI1LOC,03052MEA23EM001------ADI1R
03062MEA23EM002------ADI1LOC,03062MEA23EM001------ADI1R
03072MEA23EM002------ADI1LOC,03072MEA23EM001------ADI1R
03082MEA23EM002------ADI1LOC,03082MEA23EM001------ADI1R
"""

lines = data.strip().split('\n')
common_tmp = r'030(\d{2})MEA23EM002------ADI1([A-Z]+),030(\d{2})MEA23EM001------ADI1R'
pattern = re.compile(common_tmp)
print("匹配公式:", common_tmp)
unique_parts = []
for line in lines:
    match = pattern.match(line)
    if match:
        unique_parts.append(', '.join(match.groups()))

print("\n获取不同数据结果: ")
for part in unique_parts:
    print(part)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 22:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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