Python liest falsche Daten aus txt.Datei aus

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
Lungee
User
Beiträge: 14
Registriert: Dienstag 28. Mai 2019, 16:40

Guten Abend allerseits,

mein Programm liest die falsche Zeile aus meiner txt.Datei aus.

Code-Abschnitt:

Code: Alles auswählen

import datetime


now = datetime.date.today()
date = now.strftime('%d-%m-%Y')

date2 = (now.strftime('%m-%Y'))                                          


fileAG = (open('Rechnung 01-'+date2+'.txt', 'r'))

AG =(' '.join(map(str, (fileAG.readlines(3)))))

print(AG)

fileAG.close()
Die Daten aus der txt.Datei hier:

Code: Alles auswählen

157.385
50.0
7.384999999999991
107.38499999999999
207.385
Das Programm sollte die 3.Zeile ausgeben aber es gibt mir irgendwie die 1.Zeile aus.

Habe es mehrmals im gesamten Progamm als auch separat getestet, jedoch erfolglos.

Hoffe ihr könnt mir dabei helfen.

MfG

Lungee
Benutzeravatar
__blackjack__
User
Beiträge: 13925
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Lungee: Da sind zu viele runde Klammern und ``map(str, …)`` ist sinnlos, denn die Rückgabe besteht ja bereits aus einer Liste mit Zeichenketten. Dies Zeile sagt auch so *gar* nicht dass die dritte Zeile ausgegeben werden soll, denn das `join()` macht ja nur Sinn wenn das mehrere Zeilen sind.

Du hast das Argument von `readlines()` falsch verstanden. Das ist die Anzahl der Zeichen nach der nichts mehr gelesen wird wenn die bisherigen Zeilen zusammen diesen Wert überschritten haben. Und das ist bei drei Zeichen natürlich schon bei der ersten Zeile in dem Beispiel erreicht, weil die mehr als drei Zeichen enthält. Das Argument habe ich noch nie benutzt, denn so wirklich viele Einsatzzwecke gibt es dafür nicht. `readlines()` benutze ich an sich gar nicht, denn das macht IMHO nur Sinn wenn man das nicht besonders sinnvolle Argument benötigt. Sonst ist es flexibler wenn man einfach `list()` auf das Dateiobjekt anwendet um alle Zeilen zu bekommen.

Ich vermute mal Du suchst `itertools.islice()` und willst von den Zeilen entweder noch das Zeilenende entfernen, oder `join()` auf einer *leeren* Zeichenkette aufrufen und nicht auf einer mit einem Leerzeichen drin.

`date` wird nicht verwendet. Namen nummerieren ist schlecht. Zeichenkettenwerte mit ``+`` zusammenstückelt ist eher BASIC als Python. Wenn man Zeichenkettenformatierung mit f-Zeichenkettenliteralen (ab Python 3.6) oder der `format()`-Methode verwendet, kann man sich auf `strftime()` sparen, denn das Format kann man auch beim Platzhalter angeben.

Namen werden in Python klein_mit_unterstrichen geschrieben. Also `file_ag`, beziehungsweise `ag_file` – es sei denn Du bist Yoda.

Wenn möglich sollte man Dateien zusammen mit der ``with``-Anweisung öffnen. Hier ist das möglich. Und man sollte explizit eine Kodierung angeben wenn man mit Textdateien arbeitet.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Antworten