.txt einlesen->Werte/2->neue .txt erstellen

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
MarcNAV
User
Beiträge: 52
Registriert: Freitag 16. Mai 2014, 11:39

Bin Python Neueinsteiger und bin gerade dabei, eine einfaches Problem zu lösen. Ich möchte eine .txt datei einlesen, Form ist:

4 8
6 2
2 8
usw.

also immer spalten getrennt durch leerzeichen, wurde aus excel exportiert.

dann jeden wert durch 2 teilen und eine neue .txt datei erstellen, in der gleichen form.
mein bisheriger code den ich mir zusammengereimt habe sieht folgenderrmaßén aus, funktioniert aber leider nich:

Code: Alles auswählen

import os.path
def main():
    os.path.dirname(r"f:\Projekt\Python Hilfe")
    datei_in= open("teilen.txt", "r")

    datei_out = open("teilen2.txt","w")
    i = 1
    for column in columns in datei_in:

        value = row.setValue(field, value/2)
        return value

    i = i + 1
    datei_out.write(value)
    
    datei_in.close()
    datei_out.close()
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Da fehlt noch einiges an Verständnis.

Der Aufruf von os.path.dirname ist sinnfrei. os.path.dirname gibt dir einen Pfad zurück. Du rufst aber die Funktion einfach auf ohne den Rückgabewert zu verwenden. Es sieht ohnenih nicht so aus, als bräuchtest du die Funktion hier, da dein Parameter ja bereits den passenden Pfad enthält.

Der Pfad soll vermutlich den Pfad darstellen in dem die zu öffnenden Dateien liegen. In dem Fall solltest du Pfad und Dateinamen mit der passenden Funktion verketten und Die Datei auch wirklich dort öffnen wo du möchtest.

Code: Alles auswählen

    filename_in = os.path.join(r"f:\Projekt\Python Hilfe", 'teilen.txt')
    datei_in= open(filename_in, "r")

    #oder
    filename_in = os.path.join('f:\\', 'Projekt', 'Python Hilfe', 'teilen.txt')
    datei_in= open(filename_in, "r")
Dann erfindest du aus heiterem Himmel ein columns. Du hast erst einmal keine Spalten, du hast nur eine einzelne Zeile. Der Code wäre dort also:

Code: Alles auswählen

for line in datei_in:

line nimmt jetzt innerhalb der Schleife jeweils den Inhalt der jeweils eingelesenen Zeile an.

Diese Zeile musst du jetzt in ihre Bestandteile aufspalten. Dafür verfügen Strings über die Methode split. Ohne Parameter aufgerufen zerlegt diese Methode den String anhand der Leerzeichen.

Code: Alles auswählen

    columns = line.split()
Jetzt musst du die Werte in columns nur noch in Zahlen konvertieren und kannst deine Berechnung durchführen.

Die Dateien solltest du übrigens mit folgendem Konstrukt öffnen:

Code: Alles auswählen

with open(filename, 'r') as input_data:
    for line in input_data:
        [...]
Damit wird die Datei am Ende des Blocks automatisch geschlossen (du brauchst kein close mehr) und es ist völlig egal ob zwischendrin aine Exception auftrat oder nicht.

Für das Einlesen könntest du alternativ auch das csv-Modul verwenden.

Und jetzt erkläre bitte noch, wofür dein i gut sein soll.

Wie gesagt, dir fehlen Grundlagen. Das Tutorial kennst du?
MarcNAV
User
Beiträge: 52
Registriert: Freitag 16. Mai 2014, 11:39

Vielen dank dir! Hatte das aus mehrern Beispielen zusammengestückelt und dachte mir ich lern das am schnellsten mit konkreten Problemstellungen. Werde mir das Tutorial mal anschauen
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

MarcNAV hat geschrieben:Vielen dank dir! Hatte das aus mehrern Beispielen zusammengestückelt und dachte mir ich lern das am schnellsten mit konkreten Problemstellungen. Werde mir das Tutorial mal anschauen
Experimentiere. Schreib ab und zu mal ein print in den Code um dir Werte während des Programmablaufs anzuschauen. Und Fragen, die du durch Lesen und Experimentieren nicht befriedigend beantwortet bekommst, kannst du natürlich gerne hier stellen.
Antworten