2017-11-22 12 views
0

私は生物学者であり、いくつかのファイルを処理するためのクイックスクリプトを作成する必要があります。Pythonで.strip()を使って文字を取り除くことはできません

ファイル形式は、FASTAある:

>line1 
ACCGAGCTACTAGXXXXX 
>line2 
ACGTAX 

エトセトラ。

私はすべてのXの文字を削除し、すぐにこのスクリプトtoghether載せていきたいと思います:

print """Input file must be named FILE.fasta""" 
fasta_file = raw_input('Input file name:') # Input fasta file 
char = raw_input('Which sequence should be stripped?:') 
OutFileName = fasta_file.strip('.fasta') + '_stripped.fasta' 
OutFile = open(OutFileName, 'w') 
WriteOutFile = True 
data = open(fasta_file, "r") 
for line in data: 
    if line.startswith('>'): 
     OutPut = line 
    else: 
     OutPut = line.strip(char) 
     print OutPut 
    OutFile.write(OutPut) 
print(char) 
OutFile.close() 
quit() 

それが機能しないと、私はその理由を把握することはできません。どんな助け?

P.S.ひどいコードを申し訳ありません。あなたが「他」のセクションに似た何かを行うことができますあなたのケースのために

import re 
pattern = re.compile("(\w[^X]+)") # This groups everything but X 
stripped = pattern.match(line).group() 

+0

何が問題なのですか? _ 'シーケンスを削除する必要がありますか:' _ – CristiFati

+0

Xを文字として入力すると、シーケンス行からX-esを削除しません。 基本的に、私が与えられた例のfastaファイルを処理し、charをXと定義すると、出力で何も変わらないでしょう。 – TWV

+0

両方の文字列で 'strip 'を手動で使用しました。おそらく、ファイル内のすべての行が終わると '\ n'をストリップリストに追加する必要があります。 – CristiFati

答えて

2

他の回答より優れた選択肢が指定されました。しかし、あなたのケースでは、[Python]: string.strip(s[, chars])はファイルの各行がEOLNターミネータで終わるので機能しませんでした。Xは実際には文字列の最後にありません。を用心

char = raw_input('Which sequence should be stripped?:') + "\n" 

:ラインfasta_file.strip('.fasta')は何をしていない可能性があるに

char = raw_input('Which sequence should be stripped?:') 

:コードの変更の最小値を必要と

オプションは、3 RDラインを変更することですあなたはそれがそうだと思います。ここでは、使用することを推奨されます:

fasta_file.replace('.fasta', '_stripped.fasta') 

EDIT0

私は、出力ファイルに書き込むときにもする必要があるので、あなたが、EOLNバックを追加する必要があると思いますで

OutPut = line.strip(char) 

この行を置き換えます
+0

ありがとう!それがトリックでした。 私は今から目に見えない文字を目にすることを知っています。 乾杯! – TWV

+0

あなたは大歓迎です! – CristiFati

0

から文字を削除しますあなたのコードを置き換えて、あなたの 'char'変数で '(\ w [^ X] +)'の 'X'を置き換えます。

pattern = re.compile("(\w[^" + char + "]+)") 
+0

このような単純なタスクのために、正規表現はおそらく過剰なものであり、おそらくOPの学習曲線上の重要な追加のハードルです。 – tripleee

+0

が合意した、私は彼がストリップ機能を誤って使用していると思ったが、それは問題のラインの最後に "\ n"だったことがわかる。 – Esser420

関連する問題