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

2024-09-26 22:44:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文本文件,一个包含标识符列表,另一个包含更多标识符的列表,再加上一些我想要的信息。我要做的是比较文件1和文件2中的标识符,如果它们匹配,则将文件2中的行写入一个新文件,即文件3。你知道吗

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

def identify(MOPED_Prot, Swiss_Prot, MOPED_to_Swiss):
  Swiss = open(Swiss_Prot, 'r') 
  M = open(M_Prot, 'r')
  output = open(M_to_Swiss, 'wt')
  Swissids = []
  ids = []
  for line in M.readlines():
    ids.append(line[:5])
  for line in Swiss.readlines():
    Swissids.append(line)
  while set(ids)& set(Swissids):
      output.write(#line?  Not sure what goes here + "\n")

我确实得到了代码,用类似的代码将“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个字符)


Tags: 文件to代码ids列表foroutputline
2条回答

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

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

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

最终_文件.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();

假设file1每行包含一个标识符,可能您可以使用如下内容:

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)

相关问题 更多 >

    热门问题