2012-03-25 7 views
1

Ich habe versucht, eine richtige Lösung für mein Problem für mehrere Tage suchen jetzt überall zu finden. Hoffentlich können einige von euch mich in die richtige Richtung lenken.Finden Sie eine bestimmte Zeile in der Textdatei, finden Sie ein bestimmtes Zeichen in der gleichen Zeile und ändern/ändern Sie den Wert

Ich versuche, ein System mit Proxy-Liste zu implementieren. Wobei das System den Proxy von der Liste abruft, versucht, sich mit ihm zu verbinden, und wenn es keine Verbindung herstellen konnte, die Zeile des Proxys in proxy.txt mit "= 1" ändern bedeutet Einmalig Einmal.

Wenn das System auf diesem Proxy beim nächsten Mal wieder stolpern und es wird wieder scheitern, sollte es ändern „= 1“ bis „= 2“ usw. Zeichenfolge Konvertierung in int, Werte zu ändern und dann auf String-Umwandlung zurück ist nicht schwer zu tun.

Mein Problem hier ist, was ich nicht finden kann, wie der Cursor auf bestimmte Proxy setzen und dann "= Zahl" Wert ersetzen. Ich kann Proxy finden mit .seek(), aber unter Berücksichtigung, dass jeder Proxy hat unterschiedliche Länge der Zeichen .seek (proxy + 20) einfach nicht funktionieren ...

Zum Beispiel hat proxy.txt:

192.168.0.1:8000 = 2 
192.168.0.10:80 = 1 
192.168.0.100:3128 = 2 
192.168.0.4:8080 
192.168.0.5:7822 = 2 
192.168.0.6:8005 

Auch wenn ich den Proxy finden kann ich durch das Scannen jeder Zeile müssen und dann Feuer .Seek (Adresse des Proxy), wie kann ich dann bewegen zu „=“ Zeichen?

Ich weiß, wenn es viel einfacher sein könnte, einfach alles von Textdatei zu pickle Datei zu kopieren und dann alles dort zu ändern, indem Wörterbücher etc. Aber die Idee ist, dass ich Textdatei jederzeit öffnen kann und sehen, was Proxies sind Versagen.

Danke.

+0

http://stackoverflow.com/questions/39086/search-and-replace-a-line-in-a-file-in-python sollte die Antwort enthalten, wenn ich richtig verstanden habe ... – tchap

+0

warum nicht Sie deponieren die Datei zu SQLite und dann abfragen? Festplatte io ist nicht wirklich effizient mit RAM. – luke14free

+0

Wie groß ist die Datei? –

Antwort

2

Abhängig von der Dateigröße und davon, ob Sie die Länge eines Eintrags in der Datei ändern, ist es wahrscheinlich einfacher, die gesamte Datei im Speicher zu lesen. Wenn Sie jedoch dennoch an Ort und Stelle lesen/schreiben möchten:

Angenommen, ich möchte den Eintrag 192.168.0.10:80 = 1 so ändern, dass es 192.168.0.10:80 = 2 lautet.

searchValue = "192.168.0.10:80" 
newNumber = 2 

f = open("datafile.txt", "r+b") 

for line in file: 
    if line.split()[0] == searchValue: 
     position = f.tell() - len(line) #the tell() method gives the current position in the file 
     f.seek(position) 
     f.write("%s = %d" % (searchValue, newNumber)) 
     break 

f.close() 

HINWEIS: Dies funktioniert nur, wenn Sie nicht die Länge einer der Einträge (einschließlich dem Hinzufügen von Leerzeichen), wenn die Länge der Einträge ändert überhaupt modifizieren (dh, wenn Sie 192.168.0.10:80\n-192.168.0.10:80 = 1\n ändern) Dann überschreiben Sie einen Teil der nächsten Zeile in der Datei. Wenn dies der Fall ist, lesen Sie die Datei besser im Speicher und ändern sie dann.

Verwandte Themen