3

私はBiopythonを使用して遺伝子の突然変異を分析する分子生物学者であり、私の問題は次のとおりです。

多くの異なるシーケンス(数百万)を含むファイルがありますが、そのほとんどは重複しています。重複を見つけて破棄し、一意のシーケンスごとに1つのコピーを保持する必要があります。モジュールeditdistを使用して、それらすべての間の編集距離を計算し、重複しているものを判別することを計画していましたが、editdistはファイルではなく2つの文字列でのみ機能します。

文字列の代わりにファイルでそのモジュールを使用する方法を知っている人はいますか?

4

5 に答える 5

2

ファイルが 1 行に 1 つのシーケンスを配置したシーケンスのみで構成されていると仮定すると、次のことをお勧めします。

seq_file = open(#your file)

sequences = [seq for seq in seq_file]

uniques = list(set(sequences))

記憶力があると仮定して。何百万?

到着予定時刻:

上記のコメントを読んでいました (ただし、コメント特権はありません) - シーケンス ID がすべての重複に対して同じであると仮定すると、これは機能します。重複したシーケンスのシーケンス ID が異なる可能性がある場合、ファイル内でどちらが最初に来て、それらの間に何があるかを知る必要があります。

于 2012-07-12T20:29:49.557 に答える
1

Pythonである必要がありますか?

シーケンスが1行に1つずつの単純なテキスト文字列である場合、シェルスクリプトは非常に効率的です。

sort input-file-name | uniq > output-file-name

これにより、32ビットLinuxで最大2GBのファイルが処理されます。

Windowsを使用している場合は、GNUutilshttp://gnuwin32.sourceforge.net/summary.htmlをインストールします

于 2012-09-11T12:23:48.367 に答える
1

正確な重複を除外したい場合は、setPython 組み込み型を使用できます。例として:

a = ["tccggatcc", "actcctgct", "tccggatcc"] # You have a list of sequences
s = set(a) # Put that into a set

sは に等しく['tccggatcc', 'actcctgct']、重複はありません。

于 2012-07-12T20:25:49.467 に答える
0

ファイルを恐れないでください!;-)

次のことを想定して例を投稿しています。

  1. そのテキストファイル
  2. 1 行に 1 つのシーケンス

-

filename = 'sequence.txt'
with open(filename, 'r') as sqfile:
   sequences = sqfile.readlines() # now we have a list of strings

#discarding the duplicates:
uniques = list(set(sequences))

それだけです - pythons set-type を使用することで、すべての重複を自動的に排除します。

次のような同じ行にIDとシーケンスがある場合:

423401 ttacguactg

次のような ID を削除したい場合があります。

sequences = [s.strip().split()[-1] for s in sequences]

strip を使用して先頭と末尾の空白から文字列を取り除き、split を使用して行/文字列を 2 つのコンポーネント (id とシーケンス) に分割します。[-1] を使用して、最後のコンポーネント (= シーケンス文字列) を選択し、それをシーケンス リストに再パックします。

于 2012-07-12T20:29:37.673 に答える