[Python-de] Re: Zeile in Datei aufsuchen

Peter Otten __peter__ at web.de
Mon Aug 9 00:16:25 CEST 2004


Albert Hermeling wrote:

> Hallo,
> 
> ich schreibe gerade an einem kleinem Programm das aus einer Textdatei
> Pfade zu anderen Dateien ausließt und bearbeitet. Das ist ja noch sehr
> einfach zu realisieren, schwierig wird es dadurch das das Skript waehrend
> der Bearbeitung gestoppt werden kann.
> 
> Um nicht immer wieder von vorne anfangen zu müssen, habe ich mir ueberlegt
> mit enumerate beim Auslesen der Datei die Zeilen zu Numerieren. Die letzte
> Zeilennr. bevor das  Programm beendet wird wird in einer Textdatei
> gespeichert.
> 
> Beim erneuten starten des Skriptes sollte diese Nummer (Die ja die letzte
> Zeile bezeichnet) verwendet werden um mit seek den Dateizeiger dort zu
> positionieren wo die Bearbeitung abgebrochen wurde. Das funktioniert so
> leider nicht da die Dateiposition nicht mit der Zeile zu tun hat.
> 
> Gib es eine Funktion die eine bestimmt Zeile in einer Datei aufsucht?

Nein, aber eine, die eine bestimmte Position aufsucht: file.seek(). Wenn du
beim Lesen die Byteposition statt der Zeile nachhältst, kannst du beim
nächsten Durchlauf an dieser Stelle fortfahren. 

# dummy
def process(path):
    print "processed", path,


f = file("dateien.txt", "rb")

# wenn position.txt nicht gelesen werden kann, 
# wird pos == 0 angenommen
try:
    f2 = file("position.txt")
except IOError:
    pos = 0
else:
    pos = int(f2.read())
    f2.close()
    f.seek(pos)
    
for path in f:
   print path,
   if raw_input("Weiter?") not in "Jj":
       break
   process(path)
   pos += len(path)


f2 = file("position.txt", "w")
f2.write(str(pos))

Unter Windows ist wichtig, dass die Datei "dateien.txt" im Binärmodus
geöffnet wird.

Peter