2

私はpython(2.7を使用)が初めてで、整列されたシーケンスのfastaファイルを取得して、ピリオド(。)とダッシュ(-)を削除しようとしています。Pythonが各行を通過し、ピリオドとダッシュを何も置き換えないようにループを記述しようとしています。これは私が持っているスクリプトです(実行すると、ピリオドとダッシュは削除されますが、スペースは残ります):

InFileName = 'myfile.fasta'
InFile = open(InFileName, 'r')

OutFileName = 'myfile_nodots.fasta'
OutFile = open(OutFileName, 'w')

for Line in InFile:

     Line=Line.replace('.', "")

     Line=Line.replace('-', "")

     Outfile.write(Line) 

InFile.close()
OutFile.close()

どんな提案でも大歓迎です!ジェン

4

5 に答える 5

3

withファイルが閉じていることを確認するために使用するコードを整理できます。2.7では、2 番目のパラメーターを使用str.translateして削除する文字を指定します。コードは次のようになります。

with open('myfile.fasta') as fin, open('myfile_nodots.fasta', 'w') as fout:
    for line in fin:
        fout.write(line.translate(None, '-.'))
于 2013-03-01T20:20:08.230 に答える
2

コードを少し合理化できます。

import re
infilename = 'myfile.fasta'
outfilename = 'myfile_nodots.fasta'
regex = re.compile("[.-]+")    

with open(infilename, 'r') as infile, open(outfilename, 'w') as outfile:
    for line in infile:
        outfile.write(regex.sub("", line))

ドットまたはダッシュに続くスペースも削除する場合は、別の正規表現を使用します。

regex = re.compile("[.-]+ *")    
于 2013-03-01T20:17:28.320 に答える
1

と を使用fileinputしてtranslate、すばやくインプレース編集を行います。

import fileinput

for line in fileinput.input("test.txt", inplace=1):
    sys.stdout.write(line.translate(None, '-.'))

そして、あなたが尋ねる前に:はい、コンソールではなくファイルに書き込みます:)

于 2013-03-01T21:36:53.587 に答える
-1

試しましたOutfile.write(Line.strip())か?

于 2013-03-01T20:15:29.333 に答える