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.
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
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.
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 ?
Vielleicht solltest du mal den Aufbau deiner Datei zeigen, dann
ist es auch einfacher eine Lösung zu finden.
Und die Hinweise zum öffnen der Datei beachten
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 ?
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.
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.
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.
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".
Python_starter hat geschrieben:Hmm, sieht gut aus doch wen ich den code ausführen will kommt bei mir ein Fehler bei fp ..
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?
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])
EDIT: Code nachträglich angepasst.
Zuletzt geändert von snafu am Dienstag 26. Januar 2010, 16:54, insgesamt 1-mal geändert.
line 14
with open(filename) as fp:
^
SyntaxError: invalid syntax
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 Codes
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,