Problem Ausgabe in eine neue Datei zu schreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Accredo
User
Beiträge: 10
Registriert: Mittwoch 21. Oktober 2009, 20:34

Hallo alle zusammen,
ich bin neu im Forum und fange gerade an Python zu lernen.Ich habe mir ein kleines Programm zusammengetüfftelt was mir aus einer Datei einen von mir gewünschten Teil ausgibt.In der Shell habe ich nun auch meine gewünschte Ausgabe.Allerdings würde ich die Ausgabe sehr gerne in eine neue Datei schreiben lassen.Damit ich das Programm einfach ausführen kann und mir dann eine Datei mit der Lösung ausgegeben wird.
Ich weiß das man Dateien mit z.B
out = open("out.txt","w")
out.write()
out.close()
schreiben lassen kann,allerdings muß man ja in die Klammern bei out.write()eine gewünschte Variable eingeben.Ich weiß nur leider irgendwie nicht wie ich aus dem Programm eine Variable oder sowas mache.
Hier ist mein Quellcode:

Code: Alles auswählen

     
f = open ("versuch.txt","r")
s = f.read()
f.close()

#hier ist das Array fuer die Namen
names = s.split("Sets included in the consensus tree")[0].split("Species in order:")[1].split("\n")[2:]

#hier Array fuer includeten
inc = s.split("CONSENSUS TREE:")[0].split("How many times out ")[1].split("\n")
incl = [x for x in inc if x.replace(' ', '') != '']
incl = [x for x in incl if x != ''][1:]
rates = [x.split(" ") for x in incl]
rates = [x[-1] for x in rates]

#hier ist das Array fuer die notincludeden
has_ninclu = False
if s.find("Sets NOT included in consensus tree:") != -1:
   nincl= s.split("CONSENSUS TREE:")[0].split("Sets NOT included in consensus tree:")[1].split("\n")
   nincl=[x for x in nincl if x.replace(' ',"")][1:-1]
   rate = [x.split(" ") for x in nincl]
   rate = [x[-1] for x in rate]
   has_ninclu = True


#schleife fuer included 
print "Sets included in the consensus tree:\n"
for j in range (0,len(incl)):
   print rates[j]
   for i in range (0,len(incl[j])):
      if incl [j][i]  == "*":
         print names[i]
   print "\n"
          
#schleife fuer NOT included
if has_ninclu:
   print "Sets NOT included in consensus tree:\n"
   for j in range (0,len(nincl)):
      print rate[j]
      for i in range (0,len(nincl[j])):
         if nincl [j][i]  == "*":      
            print  names[i]
      print "\n"
else:
   print "No sets were reported which were NOT included in consensus tree"
   
Ich danke für jede Hilfe .
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Ich verstehe zwar kein Wort von deinem Code, aber:

Code: Alles auswählen

blah = "Hallo!"
with open('datei') as datei_objekt:
    datei_objekt.write(blah)
Gruß
Accredo
User
Beiträge: 10
Registriert: Mittwoch 21. Oktober 2009, 20:34

Hallo,
erst einmal vielen Dank für deine Antwort.
Dein Code würde ja "Hallo!" in eine neue Datei schreiben oder?
Ich habe aber ja statt nur ein Wort sozusagen meine Gesamtes Programm was praktisch ab :
#hier ist das Array fuer die Namen
bis:
print "No sets were reported which were NOT included in consensus tree"
steht.
Ich muß ja die gesamte Ausgabe in der datei haben,deshalb weiß ich nicht wie ich daraus praktisch ein "blah" mache was ich dann in die write Klammer schreibe.
Ich hoffe das ist verständlich ausgedrückt.Wie gesagt ich fange erst damit an und habe noch nicht so wirklich viel Ahnung.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Das muesste helfen:

Code: Alles auswählen

In [85]: buf = []

In [86]: buf.append("blah ")

In [87]: buf.append("blub\n")

In [88]: buf.append("blubber")

In [89]: outtext = "".join(buf)

In [90]: outtext
Out[90]: 'blah blub\nblubber'

In [91]: import sys

In [92]: sys.stdout.write(outtext)
blah blub
blubber
Ersetze Dein 'print' durch 'buf.append' und sammle so die ganzen Ausgaben in einer Liste. Mit 'join()' machst Du aus dieser Liste von Strings einen "Gesamtstring", den Du dann in die Datei schreiben kannst.

:wink:
yipyip
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Erklär doch mal genau, was du haben willst. Deine Beschreibung ist sehr wirr. Etwa sowas?

Code: Alles auswählen

from __future__ import print_function
output = open('datei', 'w')
print("Hallo!", file=output)
output.close()

Code: Alles auswählen

$ cat datei
Hallo!
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Ergaenzung:
Natuerlich kannst Du auch direkt mit einzelnen write-Befehlen die Strings in eine Datei schreiben.
:wink:
yipyip
Accredo
User
Beiträge: 10
Registriert: Mittwoch 21. Oktober 2009, 20:34

Hallo,
Cool vielen lieben Dank für eure Hilfe jetzt habe ich es hinbekommen.
Echt super.
Nochmals danke.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

@Dauerbaustelle: Du benutzt ``from __future__ import print_function``, verzichtest aber auf das with-statement. Schön verwirrend :)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

derdon hat geschrieben:@Dauerbaustelle: Du benutzt ``from __future__ import print_function``, verzichtest aber auf das with-statement. Schön verwirrend :)
Hihi, wollte es halt so eindeutig wie möglich machen, ich ging davon aus, dass der OP `with` nicht kennt.
Antworten