Wo ist mein Denkfehler?

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
steffen1965
User
Beiträge: 2
Registriert: Dienstag 14. Januar 2014, 22:17

Hallo,

ich grübl seit gefühlt 4 Stunden an folgenden Problem.

Ich habe eine Textdatei. Dort sind mehrere Zeilen im Format: (zwischen UhrzeitZ und 56578 sind mehrere Leerzeichen, ebenso nach 56578 und Windows...)

"2013-12-24T12:06:35Z 56578 WINDOWS/Prefetch/SAFARI.EXE-238FF382.pf"

Das Ziel ist: (mit nur einem Leerzeichen dazwischen)

"2013-12-24T12:06:35Z crtime WINDOWS/Prefetch/SAFARI.EXE-238FF382.pf"

Das Script, vielleicht nicht schön, funktioniert:

Code: Alles auswählen

textin = "2013-12-24T12:06:35Z           56578    WINDOWS/Prefetch/SAFARI.EXE-238FF382.pf"
liste = textin.split(" ")
spalte0 = liste[0]
crtime=" crtime "
spalte15 = liste[15]
print (spalte0+crtime+spalte15)

ABER

das 2. Script funktioniert nicht:

Code: Alles auswählen

textin = open('start0-1-batch-new.txt','r')
textin.close()
liste = textin.split(" ")
spalte0 = liste[0]
crtime=" crtime "
spalte15 = liste[15]
print (spalte0+crtime+spalte15)
Fehlermeldung zum 2. Script ist:

c:\Python33\test>python new-crtime.py
Traceback (most recent call last):
File "new-crtime.py", line 5, in <module>
liste = textin.split(" ")
AttributeError: '_io.TextIOWrapper' object has no attribute 'split'

Hat jemand eine Idee? Ich bedanke mich im Vorraus. Ich habe schon nach der Fehlermeldung gesucht aber keinen wirklichen Hinweis gefunden (mein Englisch ist nicht so toll). Mit Python arbeite ich seit ca. (zusammengerechnet) 1 Woche. Sry.

Dann habe ich eine Datei mit mehreren Zeilen im Format (man beachte die Leerzeichen im Pfad)

"Documents and Settings/All Users/Application Data atime changed 2013-12-24T20:44:25Z -> 2013-12-24T11:47:59Z"

Diese Zeilen würde ich gern umstellen in:

"2013-12-24T11:47:59Z atime Documents and Settings/All Users/Application Data"

Hat hierzu jemand eine Idee, mir machen die zusätzlichen Leerzeichen im Pfad "Bauchschmerzen", weil in den anderen Zeilen andere Pfade sind, die eben die Leerzeichen nicht haben, z.B.

"WINDOWS/WinSxS/Policies/x86_policy.6.0.Microsoft.Windows.Common-Controls_6595b64144ccf1df_x-ww_5ddad775/6.0.2600.5512.Policy atime changed 2013-12-24T11:47:57Z -> 2013-12-24T12:06:37Z"

die sollte dann umgestellt werden nach:

"2013-12-24T12:06:37Z atime WINDOWS/WinSxS/Policies/x86_policy.6.0.Microsoft.Windows.Common-Controls_6595b64144ccf1df_x-ww_5ddad775/6.0.2600.5512.Policy"

Auch hierzu danke im Voraus. Für Rückfragen stehe ich gern zur Verfügung.

Gruss Steffen
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Du musst die Textdatei auch lesen, mit "open" öffnest du diese nur. Hast du bereits das Grundlagentutorial durchgearbeitet? Dort steht es drin.
Das Leben ist wie ein Tennisball.
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

Du kannst auch hier mal reinschauen.
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
steffen1965
User
Beiträge: 2
Registriert: Dienstag 14. Januar 2014, 22:17

Hallo,
Du musst die Textdatei auch lesen, mit "open" öffnest du diese nur.
ich dachte mit 'r' habe ich auch lesen eingeschaltet.
Hast du bereits das Grundlagentutorial durchgearbeitet? Dort steht es drin.
Englisch ?!? Den deutschen Teil: http://tutorial.pocoo.org/index.html hab ich gelesen. Hab ich was übersehen?
Du kannst auch hier mal reinschauen.
Kannte ich noch nicht. Bin am durcharbeiten.

Vielleicht doch irgendjemand ein Hinweis?

Danke.
BlackJack

@steffen1965: Mir Modus 'r' öffnest Du die Datei *zum* lesen, dass heisst man kann dann danach aus der Datei lesen. Stell Dir mal vor das würde automatisch passieren und man macht das mit einem DVD-Image oder einer mehrere Gigabyte grossen Videodatei und hätte die mal eben so auf einen Schlag im Arbeitsspeicher. :-)

Um Englisch kommt man nicht herum wenn man programmieren will. Eigentlich alle aktuelle Dokumentation ist in Englisch.

Im Tutorial hast Du wahrscheinlich Kapitel 7 übersehen. Da wird unter anderem auch der Umgang mit Dateien erklärt.

Ansonsten noch zum restlichen Code: Bei `split()` würde ich `None` als erstes Argument angeben und als zweites wie oft maximal aufgeteilt werden soll, also in diesem Fall zweimal. Dann bekommt man für die Zeilen nach dem gezeigten Muster immer drei Teile. Das mittlere ersetzt man dann und setzt alles mit einem `str.join()`-Aufruf wieder zusammen.
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

Das 'r' steht für die erworbenen Rechte der Funktion / Anweisung, in diesem fall also 'read'. Hier Vorsicht walten lassen, da 'w' die Datei ohne Nachfrage überschreibt. Von der alten Datei bleibt also nichts mehr übrigm, jedenfalls nichts womit du oder ich etwas anfangen könnten.
Es gibt noch einige weitere Berechtigungen, dafür schau dir mal die Doc's an.

Das 'Öffnen' (englisch) der Datei muss noch an einer bestimmten Stelle angewiesen werden.

Du kannst dir ruhig den Link anschauen, den ich dir geschickt habe - da steht eigentlich alles zu deiner Problematik irgendwie irgendwo drin.
Und der ist sogar erstens auf deutsch und reicht zweitens sogar noch für den Anfang vollkommen aus.
Mit den englischen Dokumentationen wirst du dann erst Stück für Stück ganz langsam anfangen wenn du es brauchst, und dann wahrscheinlich auch ohne es negativ zu bemerken...

Viel Spaß weiterhin :-)
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
Antworten