poppy章鱼 发表于 2022-3-4 16:06:57

python匹配-求助

本帖最后由 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第二列,第一列相同,则输出需要调整为第二列,第一列,第三列


感激。

isdkz 发表于 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())
a.close()
b.close()
c.close()

大马强 发表于 2022-3-4 17:08:28

f1 = open("1.txt")
f2 = open("2.txt")
f3 = open("result.txt", "w")
# 去掉空格 和换行
b =
a =
result = []
for each_1 in a:
    start = each_1[:3]
    end = each_1
    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 == end or each_2 == start:
                result.append(start + " "*8 + end + " "*8 +
                              each_2)
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

poppy章鱼 发表于 2022-3-4 17:17:19

isdkz 发表于 2022-3-4 16:46


感谢您的帮助,我描述过于简单了。这个脚本还解决不了我的实际数据{:10_266:}
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


我的实际数据长这样,不好意思。

poppy章鱼 发表于 2022-3-4 17:20:34

感谢您的帮助,我描述过于简单了。这个脚本还解决不了我的实际数据{:10_266:}
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


我的实际数据长这样,是在不好意思。

阿奇_o 发表于 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()
print("----------------\n结果:\n", res)
res.to_excel('result_data.xlsx', index=False)

poppy章鱼 发表于 2022-3-4 19:20:06

阿奇_o 发表于 2022-3-4 18:57
是这样?

您好,谢谢帮助,但是报错我不知道怎么修改
   a    b
0aa1bb1
1dd1cc1
2ee1ff1
3kk1gg1
   a    bval
0aa1bb10.1
1cc1dd10.3
2ee1ff10.2
3gg1kk10.5
Traceback (most recent call last):
File "test1.py", line 14, in <module>
    res = pd.concat()
NameError: name 'df_s' is not defined

阿奇_o 发表于 2022-3-4 20:21:06

poppy章鱼 发表于 2022-3-4 19:20
您好,谢谢帮助,但是报错我不知道怎么修改


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

poppy章鱼 发表于 2022-3-4 20:37:01

阿奇_o 发表于 2022-3-4 20:21
。。没人可以手把手教你所有东西……

谢谢,我自己琢磨一下

poppy章鱼 发表于 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()
print("----------------\n:\n", res)
res.to_excel('result_data.xlsx', index=False)


结果:
                              a                           b
0184hefo|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.28184hefo|add.HEFO.ctg0001.566
4184hefo|add.HEFO.ctg0001.576       184hefo|HEFO.ctg0002.70
                              a                           b      val
0184hefo|add.HEFO.ctg0001.559   184hefo|add.HEFO.ctg0002.261.39753
1      184hefo|HEFO.ctg0001.951       184hefo|HEFO.ctg0002.671.64152
2      184hefo|HEFO.ctg0001.953   184hefo|add.HEFO.ctg0002.271.67177
3184hefo|add.HEFO.ctg0001.566   184hefo|add.HEFO.ctg0002.281.73668
4       184hefo|HEFO.ctg0002.70184hefo|add.HEFO.ctg0001.5762.26327
----------------
:
                               a                           b      val
0184hefo|add.HEFO.ctg0001.559   184hefo|add.HEFO.ctg0002.261.39753
1      184hefo|HEFO.ctg0001.951       184hefo|HEFO.ctg0002.671.64152
2      184hefo|HEFO.ctg0001.953   184hefo|add.HEFO.ctg0002.271.67177
3   184hefo|add.HEFO.ctg0002.28184hefo|add.HEFO.ctg0001.5661.73668
4184hefo|add.HEFO.ctg0001.576       184hefo|HEFO.ctg0002.702.26327


可以了,再次感谢帮助,我会努力学习代码的
页: [1]
查看完整版本: python匹配-求助