2

我有两个文本文件,一个包含标识符列表,另一个包含更多标识符列表,以及我想要的其他一些信息。我想要做的是比较文件 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

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

4

2 回答 2

1

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

file_a.txt(包含在每行 1、2、3、4、5 中)

file_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();
于 2013-08-02T17:04:24.397 回答
0

假设 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)
于 2013-08-02T16:48:50.097 回答