In eine textdatei Zeilen einfügen

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.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Cyberbroker hat geschrieben:Habe vor die Datei in einem Subfolder zu speichern, dieser Subfolder muss zunächst erstellt werden.
Für das Zusammenbauen von Dateipfaden gibt es os.path.join(). Das funktioniert dann auch betriebssystemübergreifend.

Code: Alles auswählen

foldername = 'Hexan'
path = os.path.join(os.getcwd(), foldername)
print(path)
Bei der Verwendung von os.mkdir() bitte nicht vergessen die Exception abzufangen die geworfen wird, wenn der Ordner bereits existiert oder nicht erstellt werden kann.
Cyberbroker hat geschrieben:Hab mir was zum modul os durchgelesen, allerdings nichts dazu gefunden, wie ich Dateien in einem speziellen Ordner abspeichern kann.

Bisher speicher ich einfach nur mittels:

Code: Alles auswählen

conditions_out      = open ('Condition.txt','w')
Gib beim Öffnen den kompletten Pfad zur Datei an. Um den Code von oben mal fortzusetzen:

Code: Alles auswählen

filename = 'Condition.txt'
filepath = os.path.join(path, filename)
with open(filepath, 'w') as conditions_out:
    # do something
Cyberbroker
User
Beiträge: 16
Registriert: Dienstag 17. November 2009, 22:18

Danke für die Hilfe. Bin jedes mal aufs neue überrascht wie einfach das mit Python geht.

Zur Exception:
Wenn ich das mit den exceptions richtig verstanden hab - was ich aber wohl nicht hab, da es nicht funktioniert - müsste es so gehen:

Code: Alles auswählen

def os.mkdir(a+"\\"+name):
    
    try:
        return os.mkdir(a+"\\"+name)
    
    except WindowsError:
            return print("Ordner existiert bereits. Ordner loeschen; erneut versuchen")
Allerdings sagt er mir beim punkt von os.mkdir "Invalid syntax".

Und noch ein andere Frage:

Wie schon erwähnt muss ich eine Liste von Temperaturen in eine .txt Datei schreiben.

Code: Alles auswählen

temperatures = [temp1,temp2,temp3] # wird im skript dynamisch generiert

Diese liste kann ich aber nicht einfach so in die Datei schreiben, also hab ich die liste in einen String gespeichert:

Code: Alles auswählen

temperatures_string = str(temperatures)
temperature_len = len(temperatures_string)-1
Und das dann genutzt um den String ohne Klammern [] einzufügen:

Code: Alles auswählen

conditions_out.write('TemperatureModel: Constant (K) ' +temperatures_string[1:temperature_len] +"\n")
Funktionert soweit auch gut, ausser das er mir die Komma mit einfügt
Beispiel:

Code: Alles auswählen

TemperatureModel: Constant (K) 800, 900, 1000, 1100, 1200
und die sollen da nicht sein eigentlich nicht haben.

Gruß,

René
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Pfade setzt man nicht mittels "+" zusammen, sondern mit `os.path.join`! Wurde das noch nicht erwähnt im Thread? Mir war so...

Und aus einer Liste kommt man per `"".join()` in einen String:

Code: Alles auswählen

In [5]: temperatures = [800, 900, 1000, 1100, 1200]
In [6]: print("TemperatureModel: Constant (K) {}".format(" ".join(str(t) for t in temperatures)))
TemperatureModel: Constant (K) 800 900 1000 1100 1200
Da Du vermutlich Integerwerte in der Liste stehen hast, musst Du diese noch in Strings wandeln, da die `join`-Methode nur mit Strings arbeitet.

Also ich glaube ehrlich gesagt immer noch, dass Du mit einer Templateengine besser gefahren wärst! Ok, Dir fehlen augenscheinlich noch viele Grundlagen, aber wenigstens wäre das Zusammenbauen der Daten leichter, da eine solche Engine einem das Konvertieren abnimmt und von Haus aus direkt darauf die komfortable Serialisierung von Standarddatentypen ausgelegt ist.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Cyberbroker hat geschrieben:

Code: Alles auswählen

def os.mkdir(a+"\\"+name):
    [...]
Die Definition für eine Funktion sagt, dass der Funktionsname ein identifier sein muss. "os.mkdir" ist kein identifier.

Das was du als Parameter versuchst anzugeben ist auch kein Parameter.

Welches Tutorial verwendest du zum Lernen von Python? Es scheint mir angebracht eine Warnung vor diesem Werk auszusprechen.
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Cyberbroker hat geschrieben:...
Zur Exception:
Wenn ich das mit den exceptions richtig verstanden hab - was ich aber wohl nicht hab, da es nicht funktioniert - müsste es so gehen:

Code: Alles auswählen

def os.mkdir(a+"\\"+name):
    
    try:
        return os.mkdir(a+"\\"+name)
    
    except WindowsError:
            return print("Ordner existiert bereits. Ordner loeschen; erneut versuchen")
...
"return print" kommt mir ziemlich spanisch vor... Willst du es nicht entweder zurückgeben oder ausgeben und nicht beides?
Weiß allerdings nicht wie es bei Python 3.x ist
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

JonasR hat geschrieben:"return print" kommt mir ziemlich spanisch vor... Willst du es nicht entweder zurückgeben oder ausgeben und nicht beides?
Weiß allerdings nicht wie es bei Python 3.x ist
Bei Python 3 liefert `print()`, zumindest bei Erfolg, `None` zurück. Ist halt nicht sonderlich sinnvoll das zu schreiben.
Antworten