2

私は 2 つのテキスト ファイルを持っています。1 つは識別子のリストを含み、もう 1 つはさらに多くの識別子のリストと、必要なその他の情報を含んでいます。私がやりたいことは、ファイル 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つを新しいファイルに書き込むコードを取得しましたが、1行しか繰り返されませんでした。正直なところ、私が混乱しているのは終わりです。

編集:要求に応じて、ファイルは次のようになります

ファイル 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 文字です)。

4

2 に答える 2

0

file1 に 1 行に 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)
于 2013-08-02T16:48:50.097 に答える