鱼C论坛

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

[已解决]python匹配-求助

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

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

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

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

有两个文件
  1. 1.txt
  2. aa1        bb1
  3. dd1        cc1
  4. ee1        ff1
  5. kk1        gg1
复制代码

  1. 2.txt
  2. aa1        bb1        0.1
  3. cc1        dd1        0.3
  4. ee1        ff1        0.2
  5. gg1        kk1        0.5
复制代码


输出需求:
  1. result.txt
  2. aa1        bb1        0.1
  3. dd1        cc1        0.3
  4. ee1        ff1        0.2
  5. 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
感谢您的帮助,我描述过于简单了。这个脚本还解决不了我的实际数据

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

  11. res = pd.concat([df_s, df_d])
  12. print("----------------\n结果:\n", res)
  13. res.to_excel('result_data.xlsx', index=False)
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-4 16:46:20 | 显示全部楼层
  1. a = open('1.txt')
  2. b = open('2.txt')
  3. c = open('result.txt', 'w')
  4. for i in a:
  5.         c.write(i.rstrip('\n') + b.readline()[15:])
  6. a.close()
  7. b.close()
  8. c.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


  23. f1.close()
  24. f2.close()
  25. f3.close()
复制代码


aa1        bb1        0.1
dd1        cc1        0.3
ee1        ff1        0.2
kk1        gg1        0.5
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢您的帮助,我描述过于简单了。这个脚本还解决不了我的实际数据
  1. 1.txt
  2. 184hefo|add.HEFO.ctg0001.559        184hefo|add.HEFO.ctg0002.26
  3. 184hefo|HEFO.ctg0001.951        184hefo|HEFO.ctg0002.67
  4. 184hefo|HEFO.ctg0001.953        184hefo|add.HEFO.ctg0002.27
  5. 184hefo|add.HEFO.ctg0002.28        184hefo|add.HEFO.ctg0001.566
  6. 184hefo|add.HEFO.ctg0001.576        184hefo|HEFO.ctg0002.70
复制代码

  1. 2.txt
  2. 184hefo|add.HEFO.ctg0001.559        184hefo|add.HEFO.ctg0002.26        1.39753
  3. 184hefo|HEFO.ctg0001.951        184hefo|HEFO.ctg0002.67        1.64152
  4. 184hefo|HEFO.ctg0001.953        184hefo|add.HEFO.ctg0002.27        1.67177
  5. 184hefo|add.HEFO.ctg0001.566        184hefo|add.HEFO.ctg0002.28        1.73668
  6. 184hefo|HEFO.ctg0002.70        184hefo|add.HEFO.ctg0001.576        2.26327
复制代码


我的实际数据长这样,不好意思。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  1. 2.txt
  2. 184hefo|add.HEFO.ctg0001.559        184hefo|add.HEFO.ctg0002.26        1.39753
  3. 184hefo|HEFO.ctg0001.951        184hefo|HEFO.ctg0002.67        1.64152
  4. 184hefo|HEFO.ctg0001.953        184hefo|add.HEFO.ctg0002.27        1.67177
  5. 184hefo|add.HEFO.ctg0001.566        184hefo|add.HEFO.ctg0002.28        1.73668
  6. 184hefo|HEFO.ctg0002.70        184hefo|add.HEFO.ctg0001.576        2.26327
复制代码


我的实际数据长这样,是在不好意思。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  11. res = pd.concat([df_s, df_d])
  12. print("----------------\n结果:\n", res)
  13. res.to_excel('result_data.xlsx', index=False)
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

您好,谢谢帮助,但是报错我不知道怎么修改
  1.      a    b
  2. 0  aa1  bb1
  3. 1  dd1  cc1
  4. 2  ee1  ff1
  5. 3  kk1  gg1
  6.      a    b  val
  7. 0  aa1  bb1  0.1
  8. 1  cc1  dd1  0.3
  9. 2  ee1  ff1  0.2
  10. 3  gg1  kk1  0.5
  11. Traceback (most recent call last):
  12.   File "test1.py", line 14, in <module>
  13.     res = pd.concat([df_s, df_d])
  14. NameError: name 'df_s' is not defined
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢,我自己琢磨一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  3. import pandas as pd
  4. df1 = pd.read_csv('1.txt', sep=r'\s+', header=None, names=['a','b'])
  5. print(df1)
  6. df2 = pd.read_csv('2.txt', sep=r'\s+', header=None, names=['a','b','val'])
  7. print(df2)
  8. # 情况一,则 不变
  9. df_s =[]
  10. df_d =[]
  11. df_s = df2[ (df1.a==df2.a) & (df1.b==df2.b)]
  12. # 情况二,则调换位置
  13. df_d = df2[ (df1.a==df2.b) & (df1.b==df2.a)][['b', 'a', 'val']]
  14. df_d.columns = ['a', 'b', 'val']

  15. res = pd.concat([df_s, df_d])
  16. print("----------------\n:\n", res)
  17. res.to_excel('result_data.xlsx', index=False)
复制代码


结果:
  1.                               a                             b
  2. 0  184hefo|add.HEFO.ctg0001.559   184hefo|add.HEFO.ctg0002.26
  3. 1      184hefo|HEFO.ctg0001.951       184hefo|HEFO.ctg0002.67
  4. 2      184hefo|HEFO.ctg0001.953   184hefo|add.HEFO.ctg0002.27
  5. 3   184hefo|add.HEFO.ctg0002.28  184hefo|add.HEFO.ctg0001.566
  6. 4  184hefo|add.HEFO.ctg0001.576       184hefo|HEFO.ctg0002.70
  7.                               a                             b      val
  8. 0  184hefo|add.HEFO.ctg0001.559   184hefo|add.HEFO.ctg0002.26  1.39753
  9. 1      184hefo|HEFO.ctg0001.951       184hefo|HEFO.ctg0002.67  1.64152
  10. 2      184hefo|HEFO.ctg0001.953   184hefo|add.HEFO.ctg0002.27  1.67177
  11. 3  184hefo|add.HEFO.ctg0001.566   184hefo|add.HEFO.ctg0002.28  1.73668
  12. 4       184hefo|HEFO.ctg0002.70  184hefo|add.HEFO.ctg0001.576  2.26327
  13. ----------------
  14. :
  15.                                a                             b      val
  16. 0  184hefo|add.HEFO.ctg0001.559   184hefo|add.HEFO.ctg0002.26  1.39753
  17. 1      184hefo|HEFO.ctg0001.951       184hefo|HEFO.ctg0002.67  1.64152
  18. 2      184hefo|HEFO.ctg0001.953   184hefo|add.HEFO.ctg0002.27  1.67177
  19. 3   184hefo|add.HEFO.ctg0002.28  184hefo|add.HEFO.ctg0001.566  1.73668
  20. 4  184hefo|add.HEFO.ctg0001.576       184hefo|HEFO.ctg0002.70  2.26327
复制代码


可以了,再次感谢帮助,我会努力学习代码的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 05:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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