Python 如果文件1中的术语在文件2的行中,则将文件2中的整行写入文件3

Python 如果文件1中的术语在文件2的行中,则将文件2中的整行写入文件3,python,python-2.7,Python,Python 2.7,我有两个文本文件,一个包含标识符列表,另一个包含更多标识符的列表,以及我想要的一些其他信息。我要做的是比较文件1和2中的标识符,如果它们匹配,将文件2中的行写入一个新文件,即文件3 以下是我所拥有的(这有点奇怪,因为我进入了列表,而我在编程方面从未走得那么远): 我确实得到了代码,用类似的代码将“Swiss”中的一行代码写入新文件的每个交叉点,但它只重复了一行。老实说,结局让我感到困惑 编辑:根据要求,以下是文件的外观 文件1: B4E035 P23946 O00376

我有两个文本文件,一个包含标识符列表,另一个包含更多标识符的列表,以及我想要的一些其他信息。我要做的是比较文件1和2中的标识符,如果它们匹配,将文件2中的行写入一个新文件,即文件3

以下是我所拥有的(这有点奇怪,因为我进入了列表,而我在编程方面从未走得那么远):

我确实得到了代码,用类似的代码将“Swiss”中的一行代码写入新文件的每个交叉点,但它只重复了一行。老实说,结局让我感到困惑

编辑:根据要求,以下是文件的外观

文件1:

B4E035      
P23946      
O00376      
D6RGF3      
B2RDK6      
Q12999      
Q8TDD2      
B2RDC9      
C9JL66      
Q9NZQ9  
文件2:

P31946  1433B_HUMAN YWHAB
P62258  1433E_HUMAN YWHAE
Q04917  1433F_HUMAN YWHAH YWHA1
P61981  1433G_HUMAN YWHAG
P31947  1433S_HUMAN SFN HME1

文件3应输出文件2中的行,如果第一列中的任何标识符匹配(长度均为6个字符)

假设文件1每行包含一个标识符,可能您可以使用类似以下内容:

with open (file1, 'r') as f: ids = [line.strip () for line in f]
with open (file2, 'r') as f:
    with open (file3, 'w') as g:
        for line in f:
            if any (id in line for id in ids): g.write (line)
没有好处:我没有安装python2.7(直到现在我才知道您需要python2.7)。也许你需要做一些调整,把这段代码移植到py2上

编辑:考虑到您的样本数据,您可以尝试以下方法:

with open (file1, 'r') as f: ids = [line.strip () for line in f]
with open (file2, 'r') as f:
    with open (file3, 'w') as g:
        for line in f:
            if any (line.startswith (id) for id in ids): g.write (line)

我在这里写了一些可以帮助你的东西…我把三个文件放进一个文件夹

文件_a.txt(包含第1、2、3、4、5行)

文件_b.txt(包含第4、5、6、7、8行)

final_file.txt

这是我的剧本:

# -*- coding: utf-8 -*-

from collections import Counter

file_a = open('file_a.txt', 'r')
file_b = open('file_b.txt', 'r')
final_file = open('final_file.txt', 'w')

ids = []

for line in file_a.readlines():
  ids.append(line)

print ids
c = Counter(ids)

for line in file_b.readlines():
  print line;
  print 'count' + str(c[line])
  if c[line] > 0:
    final_file.write(line);

file_b.close();
final_file.close();
file_a.close();

您能给我们举个例子,说明您的文件是什么样子的,以及您希望输出的是什么吗?:)是的!我将其添加到帖子中,更新了我的答案以匹配您的样本数据。效果很好,谢谢!我怀疑这是否有效,因为您的ID有一个尾随的换行符。这对计数来说非常简单…我写这个脚本作为一个示例,只是adapt@Hyperboreus这是现在…#--编码:utf-8——从集合导入计数器文件\u a=open('file\u a.txt','r')file\u b=open('file\u b.txt','r')final\u file=open('final\u file.txt','w')id=[]用于文件中的行readlines():ids.append(int(line))c=count(id)用于文件中的行readlines():count=c[int(line)]打印“for line”+行数”+str(count)如果计数>0:最终文件写入(行);文件_b.close();final_file.close();文件_a.close();
# -*- coding: utf-8 -*-

from collections import Counter

file_a = open('file_a.txt', 'r')
file_b = open('file_b.txt', 'r')
final_file = open('final_file.txt', 'w')

ids = []

for line in file_a.readlines():
  ids.append(line)

print ids
c = Counter(ids)

for line in file_b.readlines():
  print line;
  print 'count' + str(c[line])
  if c[line] > 0:
    final_file.write(line);

file_b.close();
final_file.close();
file_a.close();