alonso77
Goto Top

PythonScript liest ein Input File und schreibt Output File

Hallo zusammen,

ich bin neue in Python. Ich brauche ein Python Script 2.6, 2.7, das folgende Input File einliest.

cc_oo_g_csss.sh
cc_oo_guv_zppp.sh
cc_aba_ddd.sh
cc_aba_ccxyp.sh
cc_abus_pl_fa_part1.sh
cc_abus_pl_fa_part2.sh
cc_abus_pl_fa_part3.sh
cc_abus_pl_fa_part4.sh
cc_abus_pl_fa_part5.sh
cc_abus_pl_fa_part6.sh
cc_abus_pl_fa_part7.sh
cc_abus_pl_fa_part8.sh
cc_abus_pl_fa_merge.sh
cc_abac_nsv_ssd.sh
cc_abac_kriv.sh
cc_rufrep_nia_inst_leg.sh
cc_rufrep_nia_inst_comb.sh
cc_rufrep_nia_inst_flow.sh
cc_rufrep_nia_inst.sh
cc_vision_kriv.sh
cc_vision_interface_part1.sh
cc_vision_interface_part2.sh
cc_vision_interface_part3.sh
cc_vision_interface_part4.sh
cc_vision_interface_merge.sh
cc_vision_deriv.sh
cc_ria_flows_rep_plain.sh
cc_iaed_fls_rep_merge.sh
Und schreibt das in ein File so:

cc_oo_g_csss.sh

cc_oo_guv_zppp.sh

cc_aba_ddd.sh

cc_aba_ccxyp.sh

D:\Temp\c_run_multiple_shell_skripts.sh

-S "cc_abus_pl_fauz_part1.sh, cc_abus_pl_fa_part2.sh, cc_abus_pl_fa_part3.sh, cc_abus_pl_fa_part4.sh,
cc_abus_pl_fa_part5.sh, cc_abus_pl_fa_part6.sh, cc_abus_pl_fa_part7.sh, cc_abus_pl_fa_part8.sh "

-F cc_abus_pl_fa_merge.sh

cc_abac_nsv_ssd.sh

cc_abac_kriv.sh

cc_rufrep_nia_inst_leg.sh

cc_rufrep_nia_inst_comb.sh

cc_rufrep_nia_inst_flow.sh

cc_rufrep_nia_inst.sh

cc_vision_kriv.sh

D:\Temp\c_run_multiple_shell_skripts.sh

-S "cc_vision_interface_part1.sh, cc_vision_interface_part2.sh, cc_vision_interface_part3.sh,
cc_vision_interface_part4.sh"

-F cc_vision_interface_merge.sh

cc_vision_deriv.sh

cc_ria_flows_rep_plain.sh

cc_iaed_fls_rep_merge.sh


Ic würde mich sehr freuen, wenn jemand mir helfen könnte. Danke im Voraus.

Alonso

Content-Key: 297472

Url: https://administrator.de/contentid/297472

Printed on: April 19, 2024 at 23:04 o'clock

Member: colinardo
colinardo Feb 26, 2016 updated at 16:41:26 (UTC)
Goto Top
Hallo Alonso, Willkommen auf Administrator.de!
Also wenn ich deine leider ohne Codetags geposteten Zeilen, so wie sie dort stehen, interpretiere sieht das z.B. so aus:
#!/usr/bin/python
# Zeilen der Textdatei 'inputfile.txt' in ein Array einlesen 
with open('inputfile.txt') as f:  
	content = f.readlines()

# Ausgabevariable
out = ""  
# Zeilen nach Vorgabe in Variable schreiben
out += ''.join(content[:4])  
out += "D:\Temp\c_run_multiple_shell_skripts.sh\n"  
out += '-S "' + ",".join(content[4:12]).replace('\n','') + '"\n'  
out += '-F ' + content[12] + '\n'  
out += ''.join(content[12:20])  
out += "D:\Temp\c_run_multiple_shell_skripts.sh\n"  
out += '-S "' + ",".join(content[19:24]).replace('\n','') + '"\n'  
out += '-F ' + content[24] + '\n'  
out += ''.join(content[25:28])  

# Variable in Ausgabedatei  'outputfile.txt' schreiben 
f = open('outputfile.txt', 'w')  
f.write(out)
f.close()
Grüße Uwe

-edit- kleine Korrektur
Member: Alonso77
Alonso77 Feb 26, 2016 at 17:19:04 (UTC)
Goto Top
Hallo Uwe,
danke erstmal für deine schnelle Antwort. Code sieht gut aus, sehr versteändlich face-smile Du hast meine Frage richtig verstanden, aber ich habe vergessen, was zu erwähnen. Also mein Inputfile ist nicht konstant. D.h Inputfile wird von anderem Python Script immer neue erzeugt. Und die Reihenfolge von Filezeilen wird immer unterschiedlich. Hier soll man nicht mit Zeilennummer arbeiten, sonder PythonSkript soll nach strings suchen. Namlich Python Code sucht nach Zeilen mit "part", wenn er das findet, merkt er das, und schreibt davor "D:\Temp\c_run_multiple_shell_skripts.sh" und einmal -S und dann alle 'parts' nacheinander. Am Ende schreibt er -F "....merge".
Falls er keine Zeilen mit "....part" findet, schreibt einfach so wie es in Input File war.
Leider konnte ich nicht selbst programmieren, sonst hätte ich meinen Code auch gepostet

Grüße
Alonso
Mitglied: 114757
114757 Feb 26, 2016 updated at 17:22:19 (UTC)
Goto Top
Zitat von @Alonso77:
Hier soll man nicht mit Zeilennummer arbeiten, sonder PythonSkript soll nach strings suchen.
Guckst du hier wie man das macht:
http://stackoverflow.com/questions/4843158/check-if-a-python-list-item- ...

Gruß jodel32
Member: colinardo
colinardo Feb 27, 2016 updated at 14:47:45 (UTC)
Goto Top
Ok, das ist ja nun was ganz anderes. Vielleicht machst du dir das nächste mal die Mühe und schreibst das direkt etwas detaillierter in deinen ersten Post, dann müssen wir hier nicht immer die Glaskugel bemühen face-confused ...

#!/usr/bin/python

# Ausgabedatei zum beschreiben öffnen
fout = open('outputfile.txt', 'w')  

# Variable die die parts sammelt
parts = 

# für jede Zeile der Eingabedatei
with open('inputfile.txt','r') as f:  
	for l in f:
                # wenn der String 'part' in der Zeile gefunden wird dann schreibe die Zeile in das Array 
		if 'part' in l:  
			parts.append(l.replace('\n',''))  
		else:
                        # wenn die Zeile kein 'part' mehr enthält und das Array nicht leer ist dann schreibe die Elemente wie gewünscht in die Ausgabedatei 
			if parts != :
				fout.write('D:\Temp\c_run_multiple_shell_skripts.sh\n')  
				fout.write('-S "' + ','.join(parts) + '"\n')  
				fout.write('-F ' + l)  
                                # Array Variable leeren für nächste Part-Liste
				parts = 
			else:
                                # normale Zeile, einfach in Zieldatei schreiben
				fout.write(l)

fout.close()
So jetzt solltest du Input en masse haben wie man so was machen kann. Eine eventuelle Anpassung sollte durch die Kommentare im Code, für dich nun kein Problem mehr darstellen.

Viel Erfolg
Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Member: Alonso77
Alonso77 Feb 27, 2016 at 16:48:33 (UTC)
Goto Top
Hallo Uwe,

sorry, dass ich nicht direkt am Anfang detailliert erklärt habe. Das nächste Mal mache ich richtig.))
Besten Dank für deine Mühe. Das ist genau das, was ich brauche.

VG

Alonso
Member: colinardo
colinardo Mar 02, 2016 at 15:38:21 (UTC)
Goto Top
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen nicht vergessen. Merci.
Member: Alonso77
Alonso77 Mar 03, 2016 at 11:45:28 (UTC)
Goto Top
Hallo Uwe,

ja ich mache das. Aber ich brauche deine Hilfe wieder)). Beim Testen diesen Code, was du mir geschrieben, ist mir noch was eingefallen.
Also, es gibt in meinem Input File solche Schnittstellen, die die unterschiedliche Namen haben, aber zu selber Sektion gehören. D.h. Ich brauche Name von dieser Sektion. z.B.

[kriv] = Sektion

name von schnittstellen

- pl_a_ps
- pl_b_ss
- pl_c_ww

ich suche nach z.b. pl_a_ps dann bekomme ich cc_abac_kriv.sh, denn pl_a_ps gehört zur Sektion [kriv] und kriv ist im File cc_abac_*_.sh.

Und jetzt mein Problem besteht darin, wenn ich alle drei Schnittstellennamen suche, dann gibt Code dreimal selben Filenamen im Output File, was ich nicht brauche. Z.b.

Input:
- pl_a_ps
- pl_b_ss
- pl_c_ww

Output:

cc_abac_kriv.sh
cc_abac_kriv.sh
cc_abac_kriv.sh

Ich brauche nur ein Filename bzw. cc_abac_kriv_sh, weil die zur selben Sektion gehören.
Nur bevor man in ein Output File schreibt, müssen die doppelte Zeilen gelöscht werden. Es wäre nett, wenn du das zu deinem Script einbauen würdest?
Falls ich nicht so detailliert erklärt habe, bitte erstmal fragen. Danke im Voraus.

VG

Alonso
Member: colinardo
colinardo Mar 03, 2016 updated at 12:02:21 (UTC)
Goto Top
Falls ich nicht so detailliert erklärt habe, bitte erstmal fragen. Danke im Voraus.
Sorry, aber ????????

Nur bevor man in ein Output File schreibt, müssen die doppelte Zeilen gelöscht werden
Das ist kein Problem: Removing duplicates in lists
Member: Alonso77
Alonso77 Mar 03, 2016 at 14:13:02 (UTC)
Goto Top
Danke ich probiere es
Member: Alonso77
Alonso77 Mar 04, 2016 at 09:27:09 (UTC)
Goto Top
Hi,

ich habe so gemacht, aber meine Lösung ist nicht optimal, weil ich zweimal LESE und SCHREIBE Operation mache. Kann man das zusammenknüpfen?

 
#!/usr/bin/python

# Ausgabedatei zum beschreiben öffnen
fout = open('outputfile.txt', 'w')  

# Variable die die parts sammelt
parts = 

# für jede Zeile der Eingabedatei
with open('inputfile.txt','r') as f:  
for l in f:
                # wenn der String 'part' in der Zeile gefunden wird dann schreibe die Zeile in das Array 
		if 'part' in l:  
			parts.append(l.replace('\n',''))  
		else:
                        # wenn die Zeile kein 'part' mehr enthält und das Array nicht leer ist dann schreibe die Elemente wie gewünscht in die Ausgabedatei 
			if parts != :
				fout.write('D:\Temp\c_run_multiple_shell_skripts.sh\n')  
				fout.write('-S "' + ','.join(parts) + '"\n')  
				fout.write('-F ' + l)  
                                # Array Variable leeren für nächste Part-Liste
				parts = 
			else:
                                # normale Zeile, einfach in Zieldatei schreiben
				fout.write(l)

fout.close()

lines = open(Input.txt", 'r').readlines()  
lines_set = set(lines)

fout = Output.txt'  
out  = open(fout, 'w')  

for line in lines_set:
    out.write(line + '\n')  
Mitglied: 114757
114757 Mar 04, 2016 updated at 09:49:35 (UTC)
Goto Top
Leeres Array erstellen, dort dann alle deine Zeilen in der For-Schleife mit Append reinpacken, dann mit set() die doppelten Zeilen entfernen und dann erst ganz zum Schluss das Array in das File schreiben.
Member: colinardo
colinardo Mar 04, 2016 at 10:49:38 (UTC)
Goto Top
Zitat von @114757:
Leeres Array erstellen, dort dann alle deine Zeilen in der For-Schleife mit Append reinpacken, dann mit set() die doppelten Zeilen entfernen und dann erst ganz zum Schluss das Array in das File schreiben.
Dito.