Seite 1 von 1

gezieltes einlesen von daten aus datei

Verfasst: Freitag 17. März 2006, 11:41
von keboo
Hallo Leute!

Wie sieht ein Skript aus, in welchem ich nur einen gewissen Teil einer Datei (read.txt)einlese?

Alles zwischen <data> und </data> soll eingelesen werden, der Rest nichht.

Danke,

Johannes

Verfasst: Freitag 17. März 2006, 13:15
von Joghurt
z.B. so (regexp sind u.U. besser, z.B. wenn die Matches Case-insentive sein müssen)

Code: Alles auswählen

in_data = False
buffer = []
for line in file("datei"):
  if "<data>" in line:
    in_data = True
    line = line[line.find("<data>")+6:]
  if in_data:
    buffer_append(line)
  if "</data>" in line:
    break

Verfasst: Freitag 17. März 2006, 19:17
von Leonidas
Wie wärs mit sowas:

Code: Alles auswählen

import re
content = '<data>abc</data>'
split_data = re.compile(r'<data>(.*)</data>')
print split_data.findall(content)

Problem

Verfasst: Montag 20. März 2006, 10:21
von keboo
Hi!

Warum funktioniert das so nicht?

Code: Alles auswählen

import re 
content =  open('test.txt','r')
print content.read()

print '_________________'
split_data = re.compile(r'<data>(.*)</data>') 
print split_data.findall(content)
Inputfile sieht so aus:

Code: Alles auswählen

Das ist ein Datenblatt!

<data>
Das sind die relevanten Daten.
Das muss ausgegeben werden.

JAWOHL!!
</data>

Das ist nicht mehr so wichtig!!

ENDE
Danke!

Die Fehlermeldung ist:

Traceback (most recent call last):
File "//MARS/LAV02$/Gebert/SYSTEM/Desktop/file_open_gezielt.py", line 7, in -toplevel-
print split_data.findall(content).read()
TypeError: expected string or buffer

Danke für eure Hilfe.

Johannes

Verfasst: Montag 20. März 2006, 10:25
von modelnine
Wenn Du mal genau guckst siehst Du dass der gepostete Code nicht mit dem Traceback übereinstimmt (wobei der gepostete Code auch nicht funktionieren sollte, lies noch mal was content.read() macht, und was content ist). Und im Traceback ist dann auch offensichtlich was der Fehler ist, wenn Du das andere Beispiel korrigiert hast.

Verfasst: Montag 20. März 2006, 10:28
von keboo
stimmt habe eine fehlermeldung zu weit oben genommen. sorry.

Verfasst: Montag 20. März 2006, 10:31
von keboo
Traceback (most recent call last):
File "//MARS/SYSTEM/Desktop/file_open_gezielt.py", line 7, in -toplevel-
print split_data.findall(content)
TypeError: expected string or buffer

So lautet der Fehler.

Wie muss ich den Code umstellen, dass die Fehlermeldung nicht mehr kommt?

LG

Johannes

Verfasst: Montag 20. März 2006, 11:29
von jens
keboo hat geschrieben: print split_data.findall(content)
TypeError: expected string or buffer
content ist auch nicht der Inhald der Datei als String, sondern es ist dein Dateihandling!

Mach besser sowas:

Code: Alles auswählen

f = file(...)
content = f.read()
f.close()
...

Verfasst: Montag 20. März 2006, 11:35
von r2d2

Code: Alles auswählen

import re

datei =  open('test.txt','r')
content = datei.read()
print content

print '_________________'
split_data = re.compile(r'<data>(.*)</data>')
print split_data.findall(content)
r2d2

Edit: sorry, jens war schneller