2017-01-15 20 views
0

複数のfastqファイルをfastaとqualに変換するスクリプトを作成しています。常に私はそれを実行すると、スクリプトはその後0バイトです。なぜ私のpythonスクリプト自体が削除されますか?

import sys 
import re 
import os 
import fileinput 
from Bio import SeqIO 
from Bio.Alphabet import IUPAC 

Directory = "https://stackoverflow.com/users/etc" 
def process(Directory): 
    filelist = os.listdir(Directory) 
    for f in filelist: 
     SeqIO.convert(f, "fastq", f.replace(".fastq",".qual"), "qual", alphabet=IUPAC.ambiguous_dna) 

my_directory = "https://stackoverflow.com/users/etc" 
process(my_directory) 

私は同時にFASTAとQUAL変換の両方FASTQをやって苦労 - ちょうどSeqIO.convertラインをコピーして、ファイル形式を交換することはトリックを行いません... また、私は大好きです変換されたファイルの数が印刷されています。このループでは

乾杯

+1

スクリプトを読み取り専用にするには、ファイルのアクセス許可を調整します。実行するときにどの操作が失敗するかを確認してください。次に、何が上書きされているかが分かります。 –

+0

また、実際のコードにすることはできません。インデントエラーがあり、実行されません。 –

+0

申し訳ありません、変更されました! – rororo

答えて

6

filelist = os.listdir(Directory) 
for f in filelist: 
    SeqIO.convert(f, "fastq", f.replace(".fastq",".qual"), "qual", alphabet=IUPAC.ambiguous_dna) 

...あなたはあなたのディレクトリに上のすべてのファイルをループしています。

Pythonスクリプトを除くすべてのファイル、または.fastqで終わるすべてのファイルではなく、すべてのファイルのです。

'yourscript.py'.replace('.fastq', '.qual')は依然として'yourscript.py'なので、これはPythonスクリプトを出力としても入力としても使用することで上書きされます。


ので、いくつかの注意事項がここにあります

  • は別々のデータとコードを保管してください。理想的には、全く異なるディレクトリにあります。 $HOME/binディレクトリはあなた自身のコードを保存するのに適した場所です。そのディレクトリをPATHに追加すると、どこからでも実行可能なコマンドを実行できます。
  • ループでは、末尾にないファイル名を除外します(.fastq)。それは次のようになります。 - 代わりのを検索するには、このチェックを追加した後、我々は.fastqは、ファイル名の最後に存在することを知っているので

    for f in filelist: 
        if not f.endswith('.fastq'): 
         continue 
        SeqIO.convert(f, 'fastq', f[:-len('.fastq')]+'.qual', 'qual', alphabet=IUPAC.ambiguous_dna) 
    
  • 、我々はこのようにそれを交換について少しより効率的にすることができ文字列の全体の名前は、最後に多くの文字を切り捨てて、代わりに新しい拡張子を付け加えることができます。これは少し速く、拡張子以外のファイル名の部分を変更しないことを意味します。

+0

Wohoo ..私の一日を作った! – rororo

関連する問題