Hallo zusammen.
Ich neu in diesem Forum und habe auch noch nie vorher python programmiert. Nun habe ich meine erste frage
Ich will ein script schreiben wo ich ein File öffne und dann nach einem bestimmten wort suche und dann 36 zellen nach diesem wort auslese und ausgebe.. was ich schon habe:
pfad = "C:\\Documents and Settings\\Test\\Desktop\\PythonEinarbeitung\\"
dateiname="testfile.txt"
int_Zellen = 36
datei = pfad+dateiname
in_file = open(datei,'r')
text = in_file.read()
text.find("go")
in_file.close()
print text
Hoffe Ihr könnt mir helfen.
mfg Python_starter
Bestimmte Zellen auslesen
Hallo und willkommen im Forum!
Erstmal vorweg: es gibt code-Tags zum hervorheben von Python-Code, dass macht deine Beiträge leserlicher.
Zu deinem Problem: Schau mal in der Dokumentation was dir text.find("go") zurückliefert und dann informiere dich über Slicing (ebenfalls in der Dokumentation). Mit den Informationen solltest du es hinbekommen.
Hast du dir das offizielle Python-Tutorial schon durchgelesen? Wenn nicht, dann solltest du es unbedingt nachholen.
Noch zwei drei Anmerkungen:
- Mit dem os.path-Modul kann man Pfade zusammensetzen. Dein Weg ist etwas fehleranfällig und nicht portabel.
- Entscheide dich für englische oder deutsche Namen. Beides gemischt ist recht seltsam.
- Wenn du mit Dateien arbeitest, dann solltest du auch Fehler abfangen. So weit bist du aber wahrscheinlich noch nicht.
Bis dann,
Sebastian
Erstmal vorweg: es gibt code-Tags zum hervorheben von Python-Code, dass macht deine Beiträge leserlicher.
Zu deinem Problem: Schau mal in der Dokumentation was dir text.find("go") zurückliefert und dann informiere dich über Slicing (ebenfalls in der Dokumentation). Mit den Informationen solltest du es hinbekommen.
Hast du dir das offizielle Python-Tutorial schon durchgelesen? Wenn nicht, dann solltest du es unbedingt nachholen.
Noch zwei drei Anmerkungen:
- Mit dem os.path-Modul kann man Pfade zusammensetzen. Dein Weg ist etwas fehleranfällig und nicht portabel.
- Entscheide dich für englische oder deutsche Namen. Beides gemischt ist recht seltsam.
- Wenn du mit Dateien arbeitest, dann solltest du auch Fehler abfangen. So weit bist du aber wahrscheinlich noch nicht.
Bis dann,
Sebastian
Das Leben ist wie ein Tennisball.
the more they change the more they stay the same
-
- User
- Beiträge: 8
- Registriert: Montag 25. Januar 2010, 14:19
hallo sorry mit zellen meinte ich zeilen.
Was ich nun gschaft habe bis jetz ist:
Dieser Code liesst das File zeile für Zeile durch und sucht nach dem Wort "go" wen es das wort gefunden hat geht es weiter in eine while-schleife und in dieser while schleife werden die nächsten zeilen dann mit print angezeigt. Soweit klappt alles, doch es gibt mehrere "go" in dem file und leider liesst der code jetz nur einmal das go aus und ist dan beendet. Führe ich die while line: nicht bis zum end of file durch ?
Was ich nun gschaft habe bis jetz ist:
Code: Alles auswählen
pfad = "C:\\Documents and Settings\\alijis\\Desktop\\PythonEinarbeitung\\"
dateiname="debug_reset_out_4.txt"
int_Zellen = 36
datei = pfad+dateiname
fobj = open(datei,'r')
foundgo = "false"
howmuch = 0
import re
counter = 32
line = fobj.readline()
while line:
counter = 32
result = re.search("go", line)
if result:
while counter != 0:
counter -= 1
Needed = fobj.readline()
result2 = re.search("go", Needed)
if result2:
counter = 0
else:
print Needed
line = fobj.readline()
fobj.close()
Dieser Code liesst das File zeile für Zeile durch und sucht nach dem Wort "go" wen es das wort gefunden hat geht es weiter in eine while-schleife und in dieser while schleife werden die nächsten zeilen dann mit print angezeigt. Soweit klappt alles, doch es gibt mehrere "go" in dem file und leider liesst der code jetz nur einmal das go aus und ist dan beendet. Führe ich die while line: nicht bis zum end of file durch ?
Ich würde einfach beim Lesen der Datei die Zeilennummer mitzählen, jede Zeilennummer einer Zeile die "go" enthält in eine Liste schreiben und beim Lesen jeder Zeile schauen ob der Wert Zeilennummer - 36 in der Liste steht.Python_starter hat geschrieben:Dieser Code liesst das File zeile für Zeile durch und sucht nach dem Wort "go" wen es das wort gefunden hat geht es weiter in eine while-schleife und in dieser while schleife werden die nächsten zeilen dann mit print angezeigt. Soweit klappt alles, doch es gibt mehrere "go" in dem file und leider liesst der code jetz nur einmal das go aus und ist dan beendet. Führe ich die while line: nicht bis zum end of file durch ?
-
- User
- Beiträge: 8
- Registriert: Montag 25. Januar 2010, 14:19
So sieht etwa die Struktur aus:
@/me deine Antwort habe ich nicht ganz verstanden.
Code: Alles auswählen
2010-01-25T11:58:52.029892 I 00020083 isi WDT minute
2010-01-25T11:58:52.344760 I 00020085 inc {"msg":"180000020085000200830C006D0800020085010303004C2D"}
2010-01-25T11:58:52.349858 I 00020083 dal MINILOGGING_MAC_DEBUG_LQM_TX_POWER_DEC
2010-01-25T11:58:52.350604 I 00020083 dal minilog value: 389
2010-01-25T11:58:53.061563 I 00020083 inc {"msg":"1800000200830002008506006D0800020085000502002F7A"}
2010-01-25T11:58:53.066900 I 00020085 dal MINILOGGING_MAC_DEBUG_LQM_TX_POWER_DEC
2010-01-25T11:58:53.067683 I 00020085 dal minilog value: 1155
2010-01-25T11:58:56.273594 I 00020083 ead MINILOGGING_SINGLE_P2_DEVICE_GW_NOT_FOUND_RESET_CONNECTION: No answer from gateway after attach request, delete gateway
2010-01-25T11:59:05.470379 I 00020085 iag P2 tunnel msg to 00020083
2010-01-25T11:59:06.583012 I 00020085 dal MINILOGGING_MAC_DEBUG_LQM_TX_POWER_DEC
2010-01-25T11:59:06.583792 I 00020085 dal minilog value: 899
2010-01-25T11:59:06.586203 I 00020083 inc {"msg":"22100002008300020085070002086408000200850002008301001100000C000099F3"}
2010-01-25T11:59:06.587365 I 00020083 wad MINILOGGING_SINGLE_P2_DEVICE_FOREIGN_MESSAGE: P2 cmd ign
2010-01-25T11:59:18.302326 I 00020085 isi WDT minute
2010-01-25T11:59:22.344158 I 00020085 inc {"msg":"180000020085000200830D006D0800000000010303002482"}
2010-01-25T11:59:22.349232 I 00020083 dal MINILOGGING_MAC_DEBUG_LQM_TX_POWER_DEC
2010-01-25T11:59:22.349970 I 00020083 dal minilog value: 389
2010-01-25T11:59:23.064211 I 00020083 inc {"msg":"1800000200830002008508006D0800020085000502000832"}
2010-01-25T11:59:23.069308 I 00020085 dal MINILOGGING_MAC_DEBUG_LQM_TX_POWER_DEC
2010-01-25T11:59:23.070056 I 00020085 dal minilog value: 643
2010-01-25T11:59:30.675939 I 00020083 isf boot 2.0
2010-01-25T11:59:30.691526 I 00020083 isf msp430-fdrf271_es01
2010-01-25T11:59:30.710582 I 00020085 isf boot 2.0
2010-01-25T11:59:30.711372 I 00020085 isf msp430-fdrf271_es01
2010-01-25T11:59:30.758432 I 00020085 isf go
2010-01-25T11:59:30.759144 I 00020085 esi INFOMEM_VERSION
2010-01-25T11:59:30.759620 I 00020083 isf go
2010-01-25T11:59:30.760301 I 00020083 esi INFOMEM_VERSION
2010-01-25T11:59:30.803118 I 00020085 esi trail: 0xD5DC
2010-01-25T11:59:30.803793 I 00020085 esi trail: 0xC462
2010-01-25T11:59:30.804440 I 00020085 esi trail: 0x119E
2010-01-25T11:59:30.805081 I 00020085 esi trail: 0x11AE
2010-01-25T11:59:30.805725 I 00020085 esi trail: 0xD5DC
2010-01-25T11:59:30.806396 I 00020083 esi trail: 0xBFF4
2010-01-25T11:59:30.807037 I 00020083 esi trail: 0xA28C
2010-01-25T11:59:30.807690 I 00020083 esi trail: 0xA296
2010-01-25T11:59:30.808335 I 00020083 esi trail: 0x9FE0
2010-01-25T11:59:30.865363 I 00020085 esi trail: 0xC508
2010-01-25T11:59:30.866055 I 00020085 esi trail: 0x1DBC
2010-01-25T11:59:30.866702 I 00020085 esi trail: 0xB3D6
2010-01-25T11:59:30.867349 I 00020085 esi trail: 0xB3E0
2010-01-25T11:59:30.868015 I 00020085 esi trail: 0xB0B4
2010-01-25T11:59:30.868666 I 00020085 esi trail: 0x964A
2010-01-25T11:59:30.869311 I 00020085 esi trail: 0xB3E0
2010-01-25T11:59:30.869988 I 00020083 esi trail: 0xBD62
2010-01-25T11:59:30.870633 I 00020083 esi trail: 0x11B6
2010-01-25T11:59:30.871262 I 00020083 esi trail: 0xBFF4
2010-01-25T11:59:30.871893 I 00020083 esi trail: 0xB144
2010-01-25T11:59:30.872522 I 00020083 esi trail: 0x11A6
2010-01-25T11:59:30.873146 I 00020083 esi trail: 0x11B6
2010-01-25T11:59:30.873772 I 00020083 esi trail: 0xBFF4
2010-01-25T11:59:30.874406 I 00020083 esi trail: 0xB1EA
2010-01-25T11:59:30.928293 I 00020085 esi trail: 0xB12A
2010-01-25T11:59:30.928963 I 00020085 esi trail: 0xD282
2010-01-25T11:59:30.929610 I 00020085 esi trail: 0xB3E0
2010-01-25T11:59:30.930249 I 00020085 esi trail: 0xB12A
2010-01-25T11:59:30.930886 I 00020085 esi trail: 0xD34A
2010-01-25T11:59:30.931525 I 00020085 esi trail: 0x11AE
2010-01-25T11:59:30.932166 I 00020085 esi trail: 0xD5DC
2010-01-25T11:59:30.932812 I 00020085 esi trail: 0xC462
2010-01-25T11:59:30.933485 I 00020083 esi trail: 0x1818
2010-01-25T11:59:30.934123 I 00020083 esi trail: 0xA28C
2010-01-25T11:59:30.934751 I 00020083 esi trail: 0xA296
2010-01-25T11:59:30.935376 I 00020083 esi trail: 0x9FE0
2010-01-25T11:59:30.936047 I 00020083 esi trail: 0xBC9A
2010-01-25T11:59:30.936681 I 00020083 esi trail: 0xA296
2010-01-25T11:59:30.937313 I 00020083 esi trail: 0x9FE0
2010-01-25T11:59:30.993772 I 00020085 esi trail: 0x119E
2010-01-25T11:59:30.994447 I 00020085 esi trail: 0x11AE
2010-01-25T11:59:30.995097 I 00020085 esi trail: 0xD5DC
2010-01-25T11:59:30.995745 I 00020085 esi trail: 0xC508
2010-01-25T11:59:30.996391 I 00020085 esi trail: 0x1DBC
2010-01-25T11:59:30.997038 I 00020085 esi trail: 0xB3D6
2010-01-25T11:59:30.997698 I 00020085 esi trail: 0xB3E0
2010-01-25T11:59:30.998350 I 00020085 esi trail: 0xB0B4
2010-01-25T11:59:30.999022 I 00020083 esi trail: 0xBD62
2010-01-25T11:59:30.999661 I 00020083 esi trail: 0x11B6
2010-01-25T11:59:31.000288 I 00020083 esi trail: 0xBFF4
2010-01-25T11:59:31.000913 I 00020083 esi trail: 0xB144
2010-01-25T11:59:31.001537 I 00020083 esi trail: 0x11A6
2010-01-25T11:59:31.002163 I 00020083 esi trail: 0x11B6
2010-01-25T11:59:31.002786 I 00020083 esi trail: 0xBFF4
2010-01-25T11:59:31.003415 I 00020083 esi trail: 0xB1EA
2010-01-25T11:59:31.055465 I 00020085 esi trail: 0x964A
2010-01-25T11:59:31.056140 I 00020085 esi trail: 0x24F8
2010-01-25T11:59:31.056781 I 00020085 esi trail: 0x1DBC
2010-01-25T11:59:31.057438 I 00020085 esi trail: 0x11AE
2010-01-25T11:59:31.058220 I 00020085 imc MAC: own:22, meet:35
2010-01-25T11:59:31.059234 I 00020085 dam MINILOGGING_MESH_DEBUG_MODE_SINK
2010-01-25T11:59:31.060246 I 00020085 dam MINILOGGING_MESH_DEBUG_SENT_HELLO_BROADCAST
2010-01-25T11:59:31.060978 I 00020083 esi trail: 0x1818
2010-01-25T11:59:31.061629 I 00020083 esi trail: 0xA28C
2010-01-25T11:59:31.062257 I 00020083 esi trail: 0x22E8
2010-01-25T11:59:31.062882 I 00020083 esi trail: 0x1818
2010-01-25T11:59:31.063506 I 00020083 esi trail: 0x11B6
@/me deine Antwort habe ich nicht ganz verstanden.
Code: Alles auswählen
def get_sample(stream, match, nlines):
lines = stream.read().splitlines()
return (lines[i:i+nlines] for i,line in enumerate(lines) if match in line)
In Code gegossen sähe meine Antwort so aus:Python_starter hat geschrieben:@/me deine Antwort habe ich nicht ganz verstanden.
Code: Alles auswählen
filename = "plus36.txt"
found = []
with open(filename) as fp:
for (i, line) in enumerate(fp):
if "go" in line:
found.append(i)
print("Zeile {0}: {1}".format(i, line))
if (i - 36) in found:
print("Zeile {0}: {1}".format(i, line))
__________
Edit: Ich habe das "... und dann 36 zellen nach diesem wort auslese und ausgebe ..." so verstanden als solle die 36. Zeile ausgelesen werden und nicht alle Zeilen bis dahin. Wenn du 36 Zeilen willst muss der Code natürlich noch ein wenig angepasst werden. Die Variante von snafu passt da schon gut.
-
- User
- Beiträge: 8
- Registriert: Montag 25. Januar 2010, 14:19
Hmm, sieht gut aus doch wen ich den code ausführen will kommt bei mir ein Fehler bei fp .. wo hast du das definiert oder was ist das genau ? .. das mit filename habe ich einfach meinen genomen also "Datei".
Bitte gewöhne dir an, Fehler genau zu beschreiben, statt einfach nur "geht nicht" in den Raum zu werfen. Am praktischsten ist es, wenn du die Fehlermeldung per Copy&Paste hier zur Verfügung stellst. Momentan können wir einfach nur raten. Welche Python-Version verwendest du denn eigentlich?Python_starter hat geschrieben:Hmm, sieht gut aus doch wen ich den code ausführen will kommt bei mir ein Fehler bei fp ..
Zur Frage "Was ist fp?" kann ich nur auf die Dokumentation verweisen: http://docs.python.org/reference/compou ... -statement
-
- User
- Beiträge: 8
- Registriert: Montag 25. Januar 2010, 14:19
achso. Sorry .. Ich verwende die Python version 2.5.
Fehler :
ist das okej so ?
Fehler :
Code: Alles auswählen
line 14
with open(filename) as fp:
^
SyntaxError: invalid syntax
Ich habe das mal etwas anfängerfreundlicher versucht:
EDIT: Code nachträglich angepasst.
Code: Alles auswählen
from __future__ import with_statement
def print_samples(filename, match, nlines):
with open(filename) as f:
lines = f.readlines()
for i, line in enumerate(lines):
if match in line:
start = i
end = start + nlines
print 'Zeilen %d-%d:' % (start + 1, end)
print ''.join(lines[start:end])
Zuletzt geändert von snafu am Dienstag 26. Januar 2010, 16:54, insgesamt 1-mal geändert.
Ah ja. Das with-Statement ist erst ab Version 2.6 vorgesehen. Bei 2.5 müssen wir die Zeitmaschine anwerfen. Setze mal folgendes an den Anfang des CodesPython_starter hat geschrieben:Ich verwende die Python version 2.5.
Code: Alles auswählen
line 14 with open(filename) as fp: ^ SyntaxError: invalid syntax
Code: Alles auswählen
from __future__ import with_statement
Die letzte zitierte Zeile scheint mir eine eher umwegige Art folgendes auszudrücken:snafu hat geschrieben:Code: Alles auswählen
from __future__ import with_statement def print_samples(filename, match, nlines): with open(filename) as f: lines = f.read().splitlines(True) ...
Code: Alles auswählen
lines = f.readlines()
-
- User
- Beiträge: 8
- Registriert: Montag 25. Januar 2010, 14:19
Danke viel mals Hat geklappt. Ihr seid die besten
Falls ich das ganze richtig verstanden habe, hier eine Variante, die nicht erst die komplette Datei einliest:
Code: Alles auswählen
from __future__ import with_statement
from itertools import islice
def main():
with open('test.txt') as lines:
for line in lines:
if 'go' in line:
print line,
for line in islice(lines, 36):
print line,