Text Datei mit Python 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
sammydk1984
User
Beiträge: 8
Registriert: Sonntag 26. Juni 2011, 15:13

hallo Leute

Vielleicht kann mir einer von euch helfen.

Ich habe folgendes Problem

ich habe eine Text Datei mit folgendem Inhalt

12.01.2010 08:43:51 Dienstag
12.01.2010 10:42:28 Dienstag
12.01.2010 13:11:58 Dienstag
12.01.2010 13:25:17 Dienstag
12.01.2010 14:46:15 Dienstag
12.01.2010 15:46:06 Dienstag
12.01.2010 18:36:39 Dienstag
12.01.2010 20:59:07 Dienstag
13.01.2010 09:03:24 Mittwoch
13.01.2010 10:38:47 Mittwoch
13.01.2010 12:34:28 Mittwoch
13.01.2010 15:53:27 Mittwoch
13.01.2010 16:35:52 Mittwoch
13.01.2010 17:53:21 Mittwoch
13.01.2010 20:13:00 Mittwoch
13.01.2010 20:35:35 Mittwoch
.
.
.
.

und nu meine frage ist es möglich per script nur den ersten und letzten Eintrag von einem Tag in eine neue Text Datei auszugeben?

zb:
12.01.2010 08:43:51 Dienstag
12.01.2010 20:59:07 Dienstag
13.01.2010 09:03:24 Mittwoch
13.01.2010 20:35:35 Mittwoch

so müsste das aussehen

geht das ?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

sammydk1984 hat geschrieben:geht das ?
Ja, v.a. wenn sie sortiert in der Datei stehen ist das sehr einfach.
sammydk1984
User
Beiträge: 8
Registriert: Sonntag 26. Juni 2011, 15:13

cofi hat geschrieben:
sammydk1984 hat geschrieben:geht das ?
Ja, v.a. wenn sie sortiert in der Datei stehen ist das sehr einfach.

ja es ist so in einer Textdatei aufgelistet


12.01.2010 08:43:51 Dienstag
12.01.2010 10:42:28 Dienstag
12.01.2010 13:11:58 Dienstag
12.01.2010 13:25:17 Dienstag
12.01.2010 14:46:15 Dienstag
12.01.2010 15:46:06 Dienstag
12.01.2010 18:36:39 Dienstag
12.01.2010 20:59:07 Dienstag
13.01.2010 09:03:24 Mittwoch
13.01.2010 10:38:47 Mittwoch
13.01.2010 12:34:28 Mittwoch
13.01.2010 15:53:27 Mittwoch
13.01.2010 16:35:52 Mittwoch
13.01.2010 17:53:21 Mittwoch
13.01.2010 20:13:00 Mittwoch
13.01.2010 20:35:35 Mittwoch
14.01.2010 09:34:27 Donnerstag
14.01.2010 11:20:00 Donnerstag
14.01.2010 17:38:26 Donnerstag
14.01.2010 19:05:28 Donnerstag
14.01.2010 20:21:20 Donnerstag
14.01.2010 20:57:20 Donnerstag
15.01.2010 09:30:15 Freitag
15.01.2010 10:16:46 Freitag
15.01.2010 14:47:32 Freitag
15.01.2010 16:55:30 Freitag
15.01.2010 18:19:10 Freitag
15.01.2010 21:53:03 Freitag
15.01.2010 22:17:43 Freitag
16.01.2010 07:55:04 Samstag
17.01.2010 13:28:33 Sonntag
18.01.2010 08:38:32 Montag
18.01.2010 09:48:48 Montag
18.01.2010 11:16:43 Montag
18.01.2010 15:47:33 Montag
18.01.2010 16:15:02 Montag
18.01.2010 16:35:02 Montag
18.01.2010 17:10:31 Montag
18.01.2010 17:25:03 Montag
18.01.2010 18:37:32 Montag
18.01.2010 19:50:38 Montag
19.01.2010 09:11:49 Dienstag
19.01.2010 09:55:08 Dienstag
19.01.2010 15:54:32 Dienstag
19.01.2010 18:08:20 Dienstag
19.01.2010 19:21:29 Dienstag
19.01.2010 22:07:41 Dienstag
20.01.2010 08:33:49 Mittwoch
20.01.2010 15:42:38 Mittwoch
20.01.2010 17:18:20 Mittwoch
20.01.2010 18:07:03 Mittwoch
20.01.2010 18:40:31 Mittwoch
20.01.2010 20:47:52 Mittwoch
.
.
.
.
sammydk1984
User
Beiträge: 8
Registriert: Sonntag 26. Juni 2011, 15:13

jemand nen script für mich parat
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

sammydk1984 hat geschrieben:jemand nen script für mich parat
Wir helfen gerne beim Verbessern vorhandener Skripte. Womit hast du denn konkret ein Problem? Und welche Python-Version verwendest du?
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Ich hätte es so gelöst:http://paste.pocoo.org/show/VN19NRZzNfEWPaTqcjSV/. So habe ich zwar eine Datenstruktur geschaffen, über die es sich zu diskutieren lohnt (eine Liste von Tupeln, die jeweils aus 2 Dictionaries bestehen). Außerdem kann man den Missbrauch des csv-Moduls als unsauber ansehen. Aber hey, es funktioniert :D Und ich benutze groupby, allein darauf bin ich stolz :P

Los, jetzt steinigt mich für das Liefern einer fast-komplett Lösung
Zuletzt geändert von derdon am Sonntag 26. Juni 2011, 17:07, insgesamt 1-mal geändert.
sammydk1984
User
Beiträge: 8
Registriert: Sonntag 26. Juni 2011, 15:13

/me hat geschrieben:
sammydk1984 hat geschrieben:jemand nen script für mich parat
Wir helfen gerne beim Verbessern vorhandener Skripte. Womit hast du denn konkret ein Problem? Und welche Python-Version verwendest du?
Python 3.2 windows
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

ohne csv-Modul und entsprechend anderer Datenstrutur:

Code: Alles auswählen

>>> result = [(take_first(weekday), take_last(weekday)) for weekday in [list(g) for k, g in groupby(io, lambda line: line.split()[2])]]
>>> pprint(result)
[('12.01.2010 08:43:51 Dienstag\n', '12.01.2010 20:59:07 Dienstag\n'),
 ('13.01.2010 09:03:24 Mittwoch\n', '13.01.2010 20:35:35 Mittwoch\n'),
 ('14.01.2010 09:34:27 Donnerstag\n', '14.01.2010 20:57:20 Donnerstag\n'),
 ('15.01.2010 09:30:15 Freitag\n', '15.01.2010 22:17:43 Freitag\n'),
 ('16.01.2010 07:55:04 Samstag\n', '16.01.2010 07:55:04 Samstag\n'),
 ('17.01.2010 13:28:33 Sonntag\n', '17.01.2010 13:28:33 Sonntag\n'),
 ('18.01.2010 08:38:32 Montag\n', '18.01.2010 19:50:38 Montag\n'),
 ('19.01.2010 09:11:49 Dienstag\n', '19.01.2010 22:07:41 Dienstag\n'),
 ('20.01.2010 08:33:49 Mittwoch\n', '20.01.2010 20:47:52 Mittwoch')]
sammydk1984
User
Beiträge: 8
Registriert: Sonntag 26. Juni 2011, 15:13

derdon hat geschrieben:ohne csv-Modul und entsprechend anderer Datenstrutur:

Code: Alles auswählen

>>> result = [(take_first(weekday), take_last(weekday)) for weekday in [list(g) for k, g in groupby(io, lambda line: line.split()[2])]]
>>> pprint(result)
[('12.01.2010 08:43:51 Dienstag\n', '12.01.2010 20:59:07 Dienstag\n'),
 ('13.01.2010 09:03:24 Mittwoch\n', '13.01.2010 20:35:35 Mittwoch\n'),
 ('14.01.2010 09:34:27 Donnerstag\n', '14.01.2010 20:57:20 Donnerstag\n'),
 ('15.01.2010 09:30:15 Freitag\n', '15.01.2010 22:17:43 Freitag\n'),
 ('16.01.2010 07:55:04 Samstag\n', '16.01.2010 07:55:04 Samstag\n'),
 ('17.01.2010 13:28:33 Sonntag\n', '17.01.2010 13:28:33 Sonntag\n'),
 ('18.01.2010 08:38:32 Montag\n', '18.01.2010 19:50:38 Montag\n'),
 ('19.01.2010 09:11:49 Dienstag\n', '19.01.2010 22:07:41 Dienstag\n'),
 ('20.01.2010 08:33:49 Mittwoch\n', '20.01.2010 20:47:52 Mittwoch')]


Ist das so gemeint?

import r'D:\Systemc\Desktop\test_fahrtenbuch_2.txt
result = [(take_first(weekday), take_last(weekday)) for weekday in [list(g) for k, g in groupby(io, lambda line: line.split()[2])]]

pprint(result)

csv-Modul? Ich sehe, der Ansatz ist da und die Aufgabe scheint zu 80% erfüllt. Jetzt stellen sich allerdings andere Fragen.
Die TXT-Datei muss geladen werden. Wenn ich jetzt die Formel anwende, erhalte ich ein Error.

Vielleicht etwas detailierter für Blödis? ;-)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

In meinem Beispiel ist io ein StringIO-Objekt. Die Klasse StringIO ist dazu da, Dateiobjekte zu emulieren. Somit musste ich in meinem Beispiel keine Datei anlegen, konnte aber trotzdem zeigen, wie mein Ansatz prinzipiell funktioniert. In deiner Anwendung wirst du io also durch ein echtes Dateiobjekt ersetzen. Benutze dazu das with-Statement und die Funktion open. Warum du versuchst, das import-Statement auf einen String anzuwenden, ist mir schleierhaft. Tutorial nur oberflächlich und teilweise gelesen?
sammydk1984
User
Beiträge: 8
Registriert: Sonntag 26. Juni 2011, 15:13

Ich gab ein, ich experimentierte, ich versuchte und versagte. Syntax Error sowohl hier als auch in meinem Kopf!
Jetzt hilft nur noch eins: Detaillierte Anleitung!
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

OK, erklären ist nicht meine Stärke. Dann Versuche ich mal von Anfang an:
  1. Weißt du, wie man Dateien öffnet und deren Inhalt auslesen kann?
  2. Kennst du das with-Statement?
  3. Weißt du, was Module sind, wie man sie importiert und benutzt?
Wenn du einer der Fragen mit "Nein" beantwortet hast, empfehle ich dir, das offizielle Tutorial durchzulesen.
sammydk1984
User
Beiträge: 8
Registriert: Sonntag 26. Juni 2011, 15:13

derdon hat geschrieben:OK, erklären ist nicht meine Stärke. Dann Versuche ich mal von Anfang an:
  1. Weißt du, wie man Dateien öffnet und deren Inhalt auslesen kann?
  2. Kennst du das with-Statement?
  3. Weißt du, was Module sind, wie man sie importiert und benutzt?
Wenn du einer der Fragen mit "Nein" beantwortet hast, empfehle ich dir, das offizielle Tutorial durchzulesen.

ist es so gemeint


filename = "test_fahrtenbuch_2.txt"
file = open(filename, "r")
result = [(take_first(weekday), take_last(weekday)) for weekday in [list(g) for k, g in groupby(io, lambda line: line.split()[2])]]
pprint(result)

da bekomme ich aber leider die Meldung
Traceback (most recent call last):
File "D:\Systemc\Desktop\GatherBuddy to HonorBuddy.py", line 3, in <module>
result = [(take_first(weekday), take_last(weekday)) for weekday in [list(g) for k, g in groupby(io, lambda line: line.split()[2])]]
NameError: name 'groupby' is not defined
sammydk1984
User
Beiträge: 8
Registriert: Sonntag 26. Juni 2011, 15:13

sammydk1984 hat geschrieben:
derdon hat geschrieben:OK, erklären ist nicht meine Stärke. Dann Versuche ich mal von Anfang an:
  1. Weißt du, wie man Dateien öffnet und deren Inhalt auslesen kann?
  2. Kennst du das with-Statement?
  3. Weißt du, was Module sind, wie man sie importiert und benutzt?
Wenn du einer der Fragen mit "Nein" beantwortet hast, empfehle ich dir, das offizielle Tutorial durchzulesen.

ist es so gemeint


filename = "test_fahrtenbuch_2.txt"
file = open(filename, "r")
result = [(take_first(weekday), take_last(weekday)) for weekday in [list(g) for k, g in groupby(io, lambda line: line.split()[2])]]
pprint(result)

da bekomme ich aber leider die Meldung
Traceback (most recent call last):
File "D:\Systemc\Desktop\GatherBuddy to HonorBuddy.py", line 3, in <module>
result = [(take_first(weekday), take_last(weekday)) for weekday in [list(g) for k, g in groupby(io, lambda line: line.split()[2])]]
NameError: name 'groupby' is not defined


so leute danke noch mal ich hab es hin bekommen


input_file = 'input.txt'
output_file = 'output.txt'


def read_file(filename):
# Ließt die Datei mit den Rohdaten aus
print("Öffne Eingabedatei {0}...".format(filename), end=' ')
with open(filename, 'r') as opened_file:
content = opened_file.readlines()
print("Erfolgreich!")
return content

def write_file(filename, list_to_write):
# Schreibt die fertig bearbeiteten Daten
print("Öffne Ausgabedatei {0}...".format(filename), end=' ')
with open(filename, 'w') as opened_file:
for element in list_to_write:
opened_file.write(element)
print("Daten erfolgreich geschrieben!")

def parse_file(input_file, output_file):
# Hauptfunktion, führt alle nötigen Schritte aus
dictionary = {}
list_to_write = []
content = read_file(input_file)
print("Verarbeite...", end=' ')
for line in content:
date = line.split(' ')[0]
dictionary[date] = list()
for line in content:
date = line.split(' ')[0]
dictionary[date].append(line)
for element in dictionary:
if len(dictionary[element]) < 2:
list_to_write.append(dictionary[element][0])
else:
sorted(dictionary[element])
list_to_write.append(dictionary[element][0])
list_to_write.append(dictionary[element][-1])
list_to_write = sorted(list_to_write)
print("Erfolgreich!")
write_file(output_file,(list_to_write))


def main():
# main-Funktion; Bringt quasi den Stein ins Rollen
parse_file(input_file, output_file)
input("Fertig! Zum Beenden Enter drücken! \n")


if __name__ == '__main__':
main()
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

sammydk1984 hat geschrieben:so leute danke noch mal ich hab es hin bekommen
In der Tat: http://forum.computerbild.de/programme/ ... 04079.html :)
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

gkuhl hat geschrieben:
sammydk1984 hat geschrieben:so leute danke noch mal ich hab es hin bekommen
In der Tat: http://forum.computerbild.de/programme/ ... 04079.html :)
Womit die Antwort auf die Frage "Was hat der Fragesteller jetzt neu gelernt?" wohl hinreichend genau mit "Nichts!" gegeben werden kann.
Antworten