2012-03-06 6 views
3

私はPythonで読んでいるテキストファイルを持っています。 私は空のリストに追加するためにキーワードに続くテキストファイルから特定の要素を抽出しようとしています。ファイルには、次のようになります。txtをスキャンし、特定のデータをPythonの空のリストに追加します

enter image description here

は私が作りたい2つの空のリスト

  • 第二のリストは、リストのリストになりますシーケンス名を追加します

    第一リストフォーマットに含まれるもの[Bacteria,Phylum,Class,Order, Family, Genus, Species]

    ほとんどの生物は未培養バクテリアです。私は分離された以下のIDを持つUncultured細菌を追加しようとしています。

は、特定の単語をスキャンし、単語が発見された場合、それは[「\ tの」で区切っ]の後にある単語を取ることがとにかくありますか?

分類名データに変換するシーケンス名の辞書を作成する必要があります。

taxonomy=[ ] 

と後にリセットされます第三のリストに分類リストを入れて

seq_names=[ ] 

第二のリスト:

は、私は私がに名前を追加するために、空のリストが必要になります知っていますすべての反復

temp = [ ] 

私はそれがBiopythonで行うことができると確信しているが、私が働いています私のPythonのスキル

+0

を使用することができ、両方の新しい行とタブ上でそれを分割することに役立つだろう。 – jcollado

+0

別に\ t: 'list.split( '\ t')' – lllluuukke

答えて

2

はい方法があります。

inbuilt関数の分割を使用して、ファイルを読み込むことによって得られた文字列を配列に分割できます。これからあなたが探している単語のインデックスを見つけて、このインデックスとそれに続く単語を得るためにこのインデックスを使用することができます。たとえば、test.textという名前のテキストファイルを使用します(SOはハードタブが好きではないため、フォーマットはちょっと変わっています)。

one two three four five six seven eight nine 

次のコード

f = open('test.txt','r') 

string = f.read() 

words = string.split('\t') 
ind = words.index('seven') 
desired = words[ind+1] 

は '8'

編集して目的の戻り値になります。これは、リストの内包表記を使用している

f = open('test.txt','r') 

string = f.read() 
words = string.split('\t') 

desired = [words[ind+1] for ind, word in enumerate(words) if word == "seven"] 

リスト内のすべての次の単語を返すために、 。それは単語のリストを列挙し、あなたが探している単語であれば、その単語をリストの次のインデックスに入れます。

EDIT2:あなたは、プレーンテキストの代わりに、直接画像を使用して、正規表現

import re 
f = open('testtest.txt','r') 

string = f.read() 

words = re.split('\t|\n',string) 

desired = [words[ind+1] for ind, word in enumerate(words) if word == "seven"] 
+0

私はその部分がうまく働いていますが、指定されたインデックスの最初のエントリだけを追加します。私は読み取りの代わりにreadlinesを使ってみましたが、どちらもうまく動作するようにはできませんでした –

+0

私の答えはあなたが望むものを含むように編集しました – MDT

+0

最後のものを除いてすべてのエントリがスムーズに機能します。下の行の最初のインデックスに付けられた改行のために '\ n \ n'があります。だから私は '属'を入力した場合、それは私に 'Calidilinea \ n \ n446584.3_2'という正解 'Calidilinea'を与える​​だけでなく、改行と次のクエリ[index 0]の名前も与えます。 '属'の後のインデックスは、それが始まる前の最後のインデックスです –

1

辞書がシーケンス名でインデックス付けされているように思えます。例えば、

my_data = { 
      'some_sequence': [Bacteria,Phylum,Class,Order, Family, Genus, Species], 
      'some_other_sequence': [Bacteria,Phylum,Class,Order, Family, Genus, Species] 
      } 

その後、あなたはそのシーケンスに関するデータをプルアップするmy_data['some_sequence']にアクセスするだけだろう。

データ構造を作成するには、.split('\t')というファイルの行をループして「列」に分割してから、my_data[the_row[0]] = [the_row[10], the_row[11], the_row[13]...]のような行を辞書にロードします。

ので、

for row in inp_file.readlines(): 
    row = row.split('\t') 
    my_data[row[0]] = [row[10], row[11], row[13], ...] 
関連する問題