Hallo,
ich bin relativ neu in Python...
gibt es eine möglichkeit in einem File eine Zeile direkt anzuspringen?
Also z.B sähe das file so aus:
Daten:
a = 2
b = 4
c = 8
Zusatz:
d = 5
e = 6
f = 7
ich bräuchte einfach das file halt zeilenweise einlesen und dann wenn die section Daten kommt dort weiterlesen und nur die Werte die unter Daten stehen herausnehmen...
Danke euch
Zeile in File anspringen
Also bestimmt kommt jemand mit einer besseren Lösung, aber auf die schnelle würde ich das so machen:
Vielleicht hilft dir das weiter: http://python.sandtner.org/viewtopic.php?t=1785
gute nacht
Andreas
Code: Alles auswählen
fp = open("test.txt")
lines = fp.readlines()
try:
start_pos = lines.index("Daten:\n")
end_pos = lines.index("Zusatz:\n")
for line in lines[start_pos:end_pos]:
# leere Zeilen werden übersprungen
if len(line) > 1:
print line
except ValueError:
print "Nicht gefunden"
gute nacht
Andreas
vielen dank andreas,
ich denke damit könnte ich vorerst arbeiten ja.
Ich habe etwas über Dateideskriptoren gelesen...allerdings haut es bei mir nicht so ganz hin mit fileno() und seek(fd)...
vielleicht weiß da jemand gut bescheid?
Danke
ich denke damit könnte ich vorerst arbeiten ja.
Ich habe etwas über Dateideskriptoren gelesen...allerdings haut es bei mir nicht so ganz hin mit fileno() und seek(fd)...
vielleicht weiß da jemand gut bescheid?
Danke
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Gast,
da die Zeilen unterschiedlich lang sind, hilft dir seek nicht weiter. Du musst praktisch alle Zeilen einlesen und testen wann die Daten-Sektion kommt und dann kannst du die nachfolgenden Zeilen in eine Liste einlesen.
Hier noch eine andere Lösung.
Gruß
Dookie
da die Zeilen unterschiedlich lang sind, hilft dir seek nicht weiter. Du musst praktisch alle Zeilen einlesen und testen wann die Daten-Sektion kommt und dann kannst du die nachfolgenden Zeilen in eine Liste einlesen.
Hier noch eine andere Lösung.
Code: Alles auswählen
daten = []
flag = False
f = file("daten.txt", 'r')
for line in f:
line = line.strip()
if not line:
continue # Leerzeilen überspringen
if flag:
if line == "Zusatz:":
break
daten.append(line)
if line == "Daten:":
flag = True
f.close()
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Mir fällt da gerade die funktionsweise des sgmllib.SGMLParser ein. Hab mal was ähnliches gebaut:
Nun hab ich mich gefragt, wie man es noch kürzen kann... Denn wie man sieht werden viele gleiche Sachen gemacht... Außerdem ist diese Variante wesendlich flexibler, weil man einfach neue "Sektionen" wie z.B. "test:" einfügen kann. Man muß nur noch ein "function test(zeile):" einfügen, um diese Werte zu bearbeiten.
Hier mal eine böse Variante mit eval():
Wie kann man es ohne eval() machen???
Code: Alles auswählen
txt="""
test:
blabla
Daten:
a = 2
b = 4
c = 8
Zusatz:
d = 5
e = 6
f = 7"""
def Daten(zeile):
print "Daten:",zeile
def Zusatz(zeile):
print "Zusatz:",zeile
def undefiniert(zeile):
print "undefiniert:",zeile
txt = txt.splitlines()
print txt
type = None
for zeile in txt:
#Leerzeilen überspringen
if zeile=="": continue
if zeile=="Daten:":
type = "Daten"
continue
elif zeile == "Zusatz:":
type = "Zusatz"
continue
if type == "Daten":
Daten(zeile)
elif type == "Zusatz":
Zusatz(zeile)
else:
undefiniert(zeile)
Hier mal eine böse Variante mit eval():
Code: Alles auswählen
txt="""
test:
blabla
Daten:
a = 2
b = 4
c = 8
Zusatz:
d = 5
e = 6
f = 7"""
def Daten(zeile):
print "Daten:",zeile
def Zusatz(zeile):
print "Zusatz:",zeile
def undefiniert(zeile):
print "undefiniert:",zeile
txt = txt.splitlines()
print txt
for zeile in txt:
#Leerzeilen überspringen
if zeile=="": continue
if zeile[-1]==":":
typ = zeile[:-1]
continue
try:
eval(typ+"('"+zeile+"')")
except NameError:
undefiniert(zeile)
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi jens,
1. könntest Du die Funktionen mit den Namen in ein Dictionary eintragen oder 2. das Dictionary globals() verwenden.
Gruß
Fritz
1. könntest Du die Funktionen mit den Namen in ein Dictionary eintragen oder 2. das Dictionary globals() verwenden.
Code: Alles auswählen
...
typ = "" # vorbelegen
for zeile in txt:
#Leerzeilen überspringen
if zeile=="": continue
if zeile[-1]==":":
typ = zeile[:-1]
continue
try:
globals()[typ](zeile)
except KeyError:
undefiniert(zeile)
Fritz
[code]#!/usr/bin/env python
import this[/code]
import this[/code]