2017-08-01 8 views
-3

私はファイルを使ってテキストをファイル自体の名前に変更するコードを書くつもりです。基本的に私はEMBOSS_001と多くのファイルをテキストの最初の部分として持っています。 (EMBOSS_001|296133516|ref|YP_003640763.1|,33.06,248,157,7,1,243,1,244,7e-31, 121)。これをファイルの名前に変更したいと思います。ファイル名はfp1_blast_output.csvからfp11000_blast_output.csvまでです。ファイル内のテキスト部分のEMBOSS部分をファイルのfp()部分に変更したいと思います。これは私が持っているものですが、残念ながらそれは働いていません!私はで終わるしたいUltimatlyファイル内のテキストをファイル名に置換する

from glob import glob 

fasta_files = glob('*output.csv') 
print(fasta_files) 

for fname in fasta_files: 
    with open(fname) as input1, open('modified/{}'.format(fname), 'w') as output: 
     data = input1.read() 
     data = data.replace('EMBOSS_001',fname.split('._blast_output.csv')[0]) 
     output.write(data) 

です:

fp()|296133516|ref|YP_003640763.1|,33.06,248,157,7,1,243,1,244,7e-31, 121 
+0

このコードを実行するとどうなりますか? – Chris

+1

"EMBOSS_001のファイルは、最初のテキストとしてたくさんあります(例:fp()| 296133516 | ref | YP_003640763.1 |、33.06,248,157,7,1,243,1,244,7e-31,121) このテキストは、最初のテキストとしてEMBOSS_001を持っていませんか? – Enfenion

+0

Chris、私は多数のファイルを持っているので、私はpubDBを使ってそれをサーバー上で実行しています。出力になるまでEMBOSSテキストの変更は保存されません。 – BrianF

答えて

-1

あなたの例入力と期待/望ましい結果は同じです。 あなたは、次の試してみることができます。

with open(fname) as input1, open('modified/{}'.format(fname), 'w') as output: 
    new_fname = fname.split('.aln_blast_output.csv')[0] 
    for line_to_change in input1.readlines(): 
     output.write(line_to_change.replace('EMBOSS_001', new_fname)) 

をしても自分の誤りを投稿してください。

+0

こんにちはパブロ、答えに感謝します。不幸にも、このスクリプトはfnameが定義されていないため動作しません。私のスクリプトについては、迷惑なことに、pubDBを使用するようなコマンドですべて実行しているので、エラーが出ることはありません。私が見る限り、出力まで出力したいと思っています。 EMBOSS部分は変更されましたが、出力に保存されません。 – BrianF

+0

@BrianF私はあなたのスクリプトの "open(fname)..."行をあなたのスクリプトで "with open(fname)..."行と交換することになっていたと思います。 – Enfenion

+0

つまり、スクリプト内で一致するようにコードを修正します。 – Enfenion

0

これは機能しますか?あなたはこれらのファイルの名前(マイナス「.CSV」の部分)にすべての.csvファイル内のテキストの一部を変更したい場合は -

from glob import glob 

fasta_files = glob('*output.csv') 
print(fasta_files) 

for fname in fasta_files: 
    with open(fname) as input1, open('modified/{}'.format(fname), 'w') as output: 
     data = input1.read() 
     new_name = fname.split('_blast_output.csv')[0] 
     changed_data = data.replace('EMBOSS_001',new_name) 
     output.write(changed_data) 
0

一般的に言えば - と私は、これは実際にあなたの問題に対処願っています

from glob import glob 

fasta_files = glob('*.csv') 

for fname in fasta_files: 
    with open(fname, 'r') as finput: 
     data = finput.read() 

    data = data.replace('EMBOSS_001', fname[:-4])    

    with open('modified/{}'.format(), 'w') as output:    
     output.write(data) 
関連する問題