0

単一のファイルで動作するスクリプトを Python で作成しました。複数のファイルで実行し、各ファイルを個別に出力するための答えが見つかりませんでした。

out = open('/home/directory/a.out','w')
infile = open('/home/directory/a.sam','r')

for line in infile:
    if not line.startswith('@'):
        samlist = line.strip().split()
        if 'I' or 'D' in samlist[5]:
            match = re.findall(r'(\d+)I', samlist[5]) # remember to chang I and D here aswell
            intlist = [int(x) for x in match]
##            if len(intlist) < 10:
            for indel in intlist:
                if indel >= 10:
##                    print indel
            ###intlist contains lengths of insertions in for each read
            #print intlist
                    read_aln_start = int(samlist[3])
                    indel_positions = []
                    for num1, i_or_d, num2, m in re.findall('(\d+)([ID])(\d+)?([A-Za-z])?', samlist[5]):
                        if num1:
                            read_aln_start += int(num1)
                        if num2:
                            read_aln_start += int(num2)
                        indel_positions.append(read_aln_start)
                #print indel_positions
                    out.write(str(read_aln_start)+'\t'+str(i_or_d) + '\t'+str(samlist[2])+ '\t' + str(indel) +'\n')
out.close()

スクリプトで、a.sam、b.sam、c.sam などの名前の複数のファイルを取得し、各ファイルに対して aout.sam、bout.sam、cout.sam という出力を取得したいと考えています。

解決策またはヒントを教えてください。

よろしく、イレク

4

3 に答える 3

1

キーワードを使用してそのスクリプトを関数にラップしdef、入力ファイルと出力ファイルの名前をパラメーターとしてその関数に渡すことをお勧めします。

def do_stuff_with_files(infile, outfile):
    out = open(infile,'w')
    infile = open(outfile,'r')
    # the rest of your script

これで、入力ファイル名と出力ファイル名の任意の組み合わせに対してこの関数を呼び出すことができます。

do_stuff_with_files('/home/directory/a.sam', '/home/directory/a.out')

特定のディレクトリ内のすべてのファイルに対してこれを行う場合は、globライブラリを使用します。出力ファイル名を生成するには、最後の 3 文字 ("sam") を "out" に置き換えます。

import glob
indir, outdir = '/home/directory/', '/home/directory/out/'
files = glob.glob1(indir, '*.sam')
infiles  = [indir  + f              for f in files]
outfiles = [outdir + f[:-3] + "out" for f in files]
for infile, outfile in zip(infiles, outfiles):
    do_stuff_with_files(infile, outfile)
于 2013-07-18T09:36:41.793 に答える