鱼C论坛

 找回密码
 立即注册
查看: 1591|回复: 9

[已解决]python匹配-求助

[复制链接]
发表于 2022-3-4 16:06:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 poppy章鱼 于 2022-3-4 16:08 编辑

有两个文件
1.txt
aa1        bb1
dd1        cc1
ee1        ff1
kk1        gg1
2.txt
aa1        bb1        0.1
cc1        dd1        0.3
ee1        ff1        0.2
gg1        kk1        0.5

输出需求:
result.txt
aa1        bb1        0.1
dd1        cc1        0.3
ee1        ff1        0.2
kk1        gg1        0.5

有1.txt,和2.txt 两个文件
如果2.txt每行第一列,第二列和1.txt每行第一列,第二列相同则按原来的输出
如果2.txt每行第一列,第二列和1.txt第二列,第一列相同,则输出需要调整为第二列,第一列,第三列


感激。
最佳答案
2022-3-4 18:57:10
poppy章鱼 发表于 2022-3-4 17:20
感谢您的帮助,我描述过于简单了。这个脚本还解决不了我的实际数据

是这样?
import pandas as pd
df1 = pd.read_csv('1.txt', sep=r'\s+', header=None, names=['a','b'])
print(df1)
df2 = pd.read_csv('2.txt', sep=r'\s+', header=None, names=['a','b','val'])
print(df2)
# 情况一,则 不变
df_s = df2[ (df1.a==df2.a) & (df1.b==df2.b)]
# 情况二,则调换位置
df_d = df2[ (df1.a==df2.b) & (df1.b==df2.a)][['b', 'a', 'val']]
df_d.columns = ['a', 'b', 'val']

res = pd.concat([df_s, df_d])
print("----------------\n结果:\n", res)
res.to_excel('result_data.xlsx', index=False)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-4 16:46:20 | 显示全部楼层
a = open('1.txt')
b = open('2.txt')
c = open('result.txt', 'w')
for i in a:
        c.write(i.rstrip('\n') + b.readline()[15:])
a.close()
b.close()
c.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-4 17:08:28 | 显示全部楼层
f1 = open("1.txt")
f2 = open("2.txt")
f3 = open("result.txt", "w")
# 去掉空格 和换行
b = [i.replace(" ", "").strip() for i in list(f2)]
a = [i.replace(" ", "").strip() for i in list(f1)]
result = []
for each_1 in a:
    start = each_1[:3]
    end = each_1[3:]
    for each_2 in b:
        """
        如果2.txt每行第一列,第二列和1.txt每行第一列,第二列相同则按原来的输出
        如果2.txt每行第一列,第二列和1.txt第二列,第一列相同,则输出需要调整为第二列,第一列,第三列 
        """
        if each_2.startswith(start) or each_2.startswith(end):
            if each_2[len(start):len(start) + len(end)] == end or each_2[len(start):len(start) + len(end)] == start:
                result.append(start + " "*8 + end + " "*8 +
                              each_2[len(start) + len(end):])
for i in result:
    f3.writelines(i+"\n")
    print(i)


f1.close()
f2.close()
f3.close()


aa1        bb1        0.1
dd1        cc1        0.3
ee1        ff1        0.2
kk1        gg1        0.5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-4 17:17:19 | 显示全部楼层

感谢您的帮助,我描述过于简单了。这个脚本还解决不了我的实际数据
1.txt
184hefo|add.HEFO.ctg0001.559        184hefo|add.HEFO.ctg0002.26
184hefo|HEFO.ctg0001.951        184hefo|HEFO.ctg0002.67
184hefo|HEFO.ctg0001.953        184hefo|add.HEFO.ctg0002.27
184hefo|add.HEFO.ctg0002.28        184hefo|add.HEFO.ctg0001.566
184hefo|add.HEFO.ctg0001.576        184hefo|HEFO.ctg0002.70
2.txt
184hefo|add.HEFO.ctg0001.559        184hefo|add.HEFO.ctg0002.26        1.39753
184hefo|HEFO.ctg0001.951        184hefo|HEFO.ctg0002.67        1.64152
184hefo|HEFO.ctg0001.953        184hefo|add.HEFO.ctg0002.27        1.67177
184hefo|add.HEFO.ctg0001.566        184hefo|add.HEFO.ctg0002.28        1.73668
184hefo|HEFO.ctg0002.70        184hefo|add.HEFO.ctg0001.576        2.26327

我的实际数据长这样,不好意思。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-4 17:20:34 | 显示全部楼层
感谢您的帮助,我描述过于简单了。这个脚本还解决不了我的实际数据
1.txt
184hefo|add.HEFO.ctg0001.559        184hefo|add.HEFO.ctg0002.26
184hefo|HEFO.ctg0001.951        184hefo|HEFO.ctg0002.67
184hefo|HEFO.ctg0001.953        184hefo|add.HEFO.ctg0002.27
184hefo|add.HEFO.ctg0002.28        184hefo|add.HEFO.ctg0001.566
184hefo|add.HEFO.ctg0001.576        184hefo|HEFO.ctg0002.70
2.txt
184hefo|add.HEFO.ctg0001.559        184hefo|add.HEFO.ctg0002.26        1.39753
184hefo|HEFO.ctg0001.951        184hefo|HEFO.ctg0002.67        1.64152
184hefo|HEFO.ctg0001.953        184hefo|add.HEFO.ctg0002.27        1.67177
184hefo|add.HEFO.ctg0001.566        184hefo|add.HEFO.ctg0002.28        1.73668
184hefo|HEFO.ctg0002.70        184hefo|add.HEFO.ctg0001.576        2.26327

我的实际数据长这样,是在不好意思。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-4 18:57:10 | 显示全部楼层    本楼为最佳答案   
poppy章鱼 发表于 2022-3-4 17:20
感谢您的帮助,我描述过于简单了。这个脚本还解决不了我的实际数据

是这样?
import pandas as pd
df1 = pd.read_csv('1.txt', sep=r'\s+', header=None, names=['a','b'])
print(df1)
df2 = pd.read_csv('2.txt', sep=r'\s+', header=None, names=['a','b','val'])
print(df2)
# 情况一,则 不变
df_s = df2[ (df1.a==df2.a) & (df1.b==df2.b)]
# 情况二,则调换位置
df_d = df2[ (df1.a==df2.b) & (df1.b==df2.a)][['b', 'a', 'val']]
df_d.columns = ['a', 'b', 'val']

res = pd.concat([df_s, df_d])
print("----------------\n结果:\n", res)
res.to_excel('result_data.xlsx', index=False)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-4 19:20:06 | 显示全部楼层

您好,谢谢帮助,但是报错我不知道怎么修改
     a    b
0  aa1  bb1
1  dd1  cc1
2  ee1  ff1
3  kk1  gg1
     a    b  val
0  aa1  bb1  0.1
1  cc1  dd1  0.3
2  ee1  ff1  0.2
3  gg1  kk1  0.5
Traceback (most recent call last):
  File "test1.py", line 14, in <module>
    res = pd.concat([df_s, df_d])
NameError: name 'df_s' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-4 20:21:06 | 显示全部楼层
poppy章鱼 发表于 2022-3-4 19:20
您好,谢谢帮助,但是报错我不知道怎么修改


。。没人可以手把手教你所有东西……

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-4 20:37:01 | 显示全部楼层
阿奇_o 发表于 2022-3-4 20:21
。。没人可以手把手教你所有东西……

谢谢,我自己琢磨一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-4 20:53:56 | 显示全部楼层
阿奇_o 发表于 2022-3-4 20:21
。。没人可以手把手教你所有东西……
#!/usr/bin/python3        
# -*- coding: utf-8 -*-

import pandas as pd
df1 = pd.read_csv('1.txt', sep=r'\s+', header=None, names=['a','b'])
print(df1)
df2 = pd.read_csv('2.txt', sep=r'\s+', header=None, names=['a','b','val'])
print(df2)
# 情况一,则 不变
df_s =[]
df_d =[]
df_s = df2[ (df1.a==df2.a) & (df1.b==df2.b)]
# 情况二,则调换位置
df_d = df2[ (df1.a==df2.b) & (df1.b==df2.a)][['b', 'a', 'val']]
df_d.columns = ['a', 'b', 'val']

res = pd.concat([df_s, df_d])
print("----------------\n:\n", res)
res.to_excel('result_data.xlsx', index=False)

结果:
                              a                             b
0  184hefo|add.HEFO.ctg0001.559   184hefo|add.HEFO.ctg0002.26
1      184hefo|HEFO.ctg0001.951       184hefo|HEFO.ctg0002.67
2      184hefo|HEFO.ctg0001.953   184hefo|add.HEFO.ctg0002.27
3   184hefo|add.HEFO.ctg0002.28  184hefo|add.HEFO.ctg0001.566
4  184hefo|add.HEFO.ctg0001.576       184hefo|HEFO.ctg0002.70
                              a                             b      val
0  184hefo|add.HEFO.ctg0001.559   184hefo|add.HEFO.ctg0002.26  1.39753
1      184hefo|HEFO.ctg0001.951       184hefo|HEFO.ctg0002.67  1.64152
2      184hefo|HEFO.ctg0001.953   184hefo|add.HEFO.ctg0002.27  1.67177
3  184hefo|add.HEFO.ctg0001.566   184hefo|add.HEFO.ctg0002.28  1.73668
4       184hefo|HEFO.ctg0002.70  184hefo|add.HEFO.ctg0001.576  2.26327
----------------
:
                               a                             b      val
0  184hefo|add.HEFO.ctg0001.559   184hefo|add.HEFO.ctg0002.26  1.39753
1      184hefo|HEFO.ctg0001.951       184hefo|HEFO.ctg0002.67  1.64152
2      184hefo|HEFO.ctg0001.953   184hefo|add.HEFO.ctg0002.27  1.67177
3   184hefo|add.HEFO.ctg0002.28  184hefo|add.HEFO.ctg0001.566  1.73668
4  184hefo|add.HEFO.ctg0001.576       184hefo|HEFO.ctg0002.70  2.26327

可以了,再次感谢帮助,我会努力学习代码的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 07:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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