2017-08-01 1 views
-3

im Grunde ich versuche, ein Stück Code zu schreiben, der Text mit einer Datei auf den Namen der Datei selbst ändert. Grundsätzlich habe ich viele Dateien mit EMBOSS_001 als erstes Textstück zB. (EMBOSS_001|296133516|ref|YP_003640763.1|,33.06,248,157,7,1,243,1,244,7e-31, 121). Ich möchte dies in den Namen der Datei ändern. Ich habe Dateinamen von fp1_blast_output.csv bis fp11000_blast_output.csv. Ich möchte den EMBOSS Teil des Textes innerhalb der Datei zum fp() Teil der Datei ändern. Das ist was ich habe, aber leider funktioniert es nicht!Ersetzen von Text in einer Datei mit dem Namen der Datei

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) 

ultimatly, was ich mit will am Ende ist:

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

Was passiert, wenn Sie diesen Code ausführen? – Chris

+1

"Ich habe viele Dateien mit EMBOSS_001 als das erste Stück Text zB. (Fp() | 296133516 | ref | YP_003640763.1 |, 33.06.248.157,7,1,243,1,244,7e-31, 121)." Dieser Text enthält nicht EMBOSS_001 als das erste Stück Text? – Enfenion

+0

Chris, wie ich eine große Anzahl von Dateien habe ich es auf einem Server mit PubDB laufen. Alles scheint gut zu funktionieren, bis es zur Ausgabe kommt und die Änderungen am EMBOSS-Text nicht gespeichert werden! – BrianF

Antwort

-1

Ihr Beispiel Ein- und erwartet/gewünschtes Ergebnis ist das gleiche. Sie können die folgenden zu versuchen:

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)) 

und bitte auch Ihre Fehler posten.

+0

Hallo Pablo, danke für die Antwort. Leider funktioniert dieses Skript nicht, da fname nicht definiert ist. Was mein Skript anbelangt ist das nervig, dass ich alles auf den Befehl leite wie pubDB, und es gibt mir keinen Fehler. Soweit ich das sehe macht es was ich will bis zur Ausgabe. Der EMBOSS-Teil wird geändert, speichert jedoch nicht in der Ausgabe. – BrianF

+0

@BrianF Ich glaube, du solltest die Zeile "with open (fname) ..." in deinem Skript mit der Zeile "with open (fname) ..." in deinem Skript austauschen. – Enfenion

+0

Das heißt, den Code so zu patchen, dass er mit Ihrem Skript übereinstimmt. – Enfenion

0

Funktioniert das?

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

Allgemein gesprochen - und ich hoffe, das Ihr Problem tatsächlich adressiert, - wenn Sie einen Teil des Textes in allen CSV-Dateien mit den Namen der Dateien (abzüglich der ‚.csv‘ Teil) ändern möchten , hier ist, wie ich es angehen würde:

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) 
Verwandte Themen