bestimmte Zahlen/Wörter aus einer Datei auslesen

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
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich möchte aus einer normalen Textdatei aus jeder Zeile ab und bis einer bestimmten Stelle Zahlen, bzw. Buchstaben ausgeben.
In meinen Fall sind es Zahlen.
Aber das funktioniert irgendwie nicht, hier mal mein bisher versuchter Ansatz.

Code: Alles auswählen

with open('/home/pi/temperatur.txt') as a:
    b = a.read()
 for line in b:
     c  = line[0] [8:19]
     print(c)

"c" sollte eigentlich für jede Zeile nach dem 9. und vor dem 20. Zahl alles ausgegeben werden.
Was muss hier geändert werden?
Sirius3
User
Beiträge: 18051
Registriert: Sonntag 21. Oktober 2012, 17:20

@egon11: da ist so einiges schief. a ist ein schlechter Namen für ein Dateiobjekt, ebenso der Name b für den gesamten Inhalt. Die for-Schleife geht dann auch nicht über Zeilen, sondern über einzelne Zeichen. Auch wenn line eine ganze Zeile wäre, wäre line[0] nur das erste Zeichen und [8:19] dann leer, weil ein einzelnes Zeichen nichts an den Positionen 8 bis 19 hat.

Ein Dateiformat, das auf bestimmte Stellen in Zeilen basiert, ist sehr fehleranfällig. Wie sieht die Datei denn aus und gibt es nicht die Möglichkeit ein anderes Kriterium zu nehmen?
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Das war mein Ausgangs code:

Code: Alles auswählen

with open('/var/logtemp.csv') as csvfile, \    
  cr = csv.reader(csvfile, delimiter= ',')
  cw = csv.writer(csvout)  

 
  for line in cr:
    datum  = line[0] [:10]
 
    temp  = int(line[1][2:] )
Ich wollte es nur statt einer CSV Datei eine .txt nehmen.
Das a und b sind nur Beispiele, würde das dann anders benennen.
Sirius3
User
Beiträge: 18051
Registriert: Sonntag 21. Oktober 2012, 17:20

@egon11: was ist Dein Problem? Versuche exakt zu erklären, was Du erreichen möchtest, und nicht wie Du denkst, es machen zu müssen.

Was stört Dich an CSV?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es gibt “eine TXT Datei” nicht. Das sagt nur, das da irgendwie Text drin ist. Genausowenig ist die Endung CSV bedeutsam. Da ist hoffentlich Daten als “character separated values” drin, aber magisch ist dem auch nicht so.

Wichtig ist also der Inhalt deiner Datei. Hast du davon ein Beispiel?
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich wollte das gleiche mit einer normalen machen.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

__deets__ hat geschrieben: Hast du davon ein Beispiel?
So sieht die Datei aus:

Code: Alles auswählen

17:06:52 22-02-2018 22.8 C
17:06:58 22-02-2018 22.8 C
17:07:04 22-02-2018 22.9 C
17:07:10 22-02-2018 22.8 C
17:07:15 22-02-2018 22.8 C
17:07:21 22-02-2018 22.9 C
17:07:27 22-02-2018 22.8 C
17:07:33 22-02-2018 22.9 C
17:07:39 22-02-2018 22.9 C
17:07:45 22-02-2018 22.9 C
17:07:51 22-02-2018 22.9 C
17:07:57 22-02-2018 22.9 C
17:08:03 22-02-2018 22.9 C
17:08:09 22-02-2018 22.9 C
17:08:15 22-02-2018 22.9 C
17:08:21 22-02-2018 22.9 C
17:08:26 22-02-2018 22.9 C
17:08:32 22-02-2018 22.9 C
17:08:38 22-02-2018 22.9 C
17:08:44 22-02-2018 22.9 C
17:08:50 22-02-2018 22.9 C
17:08:56 22-02-2018 22.9 C
17:09:02 22-02-2018 22.9 C
17:09:08 22-02-2018 22.9 C
17:09:14 22-02-2018 22.9 C
17:09:20 22-02-2018 22.9 C
17:09:26 22-02-2018 22.9 C
17:09:32 22-02-2018 22.9 C
17:09:38 22-02-2018 22.9 C
17:09:43 22-02-2018 22.9 C
17:09:49 22-02-2018 22.9 C
17:09:55 22-02-2018 22.9 C
17:10:01 22-02-2018 22.9 C
17:10:07 22-02-2018 22.9 C
17:10:13 22-02-2018 22.9 C 
Sirius3
User
Beiträge: 18051
Registriert: Sonntag 21. Oktober 2012, 17:20

@egon11: dann hast Du ja eine Space-Separated-Values-Datei.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na das ist doch CSV, nur mit Leerzeichen als Trenner. Kannst du doch angeben.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Danke. Ich hab es jetzt hinbekommen mittels csv.

Edit: Also geht das in der Art nur mit CSV-Dateien?
Hier mein kleiner Cade der funktioniert:

Code: Alles auswählen

>>> import csv
>>> with open('/home/matze/temperatur.txt') as durch:
	 cr = csv.reader(durch)
	 for line in cr:
             datum  = line[0] [8:19]
             print(datum)

             
 22-02-2018
 22-02-2018
 22-02-2018
Sirius3
User
Beiträge: 18051
Registriert: Sonntag 21. Oktober 2012, 17:20

@egon11: nein, Du hast es nicht hinbekommen. Eine Datei ohne Kommas als Komma-Separierte-Datei zu lesen, ist quatsch. Das Trennzeichen ist ein Leerzeichen!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@egon: bitte schau in die Dokumentation vom csv Modul. Es gibt einen Parameter “delimiter”, den du auf ein Leerzeichen setzen kannst.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ok hab ich jetzt gemacht.
Antworten