IP adressen sortieren

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.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

import string braucht man so gut wie nie!
Statt open sollte file verwendet werden.
xrange ist resourcenschonender als range und auch schneller.

Ich hab mir mal erlaubt, Dein Script etwas aufzuräumen.

Code: Alles auswählen

source = file("C:\\_dns.log", "r")

split_list = []

start1 = 213
start2 = 147
start3 = 0
start4 = 0

ende1 = 213
ende2 = 147
ende3 = 0
ende4 = 255

target = file("C:\\newdns.log", "w")

for j in xrange(int(start1), int(ende1) + 1):
    for k in xrange(int(start2), int(ende2) + 1):
        for l in xrange(int(start3), int(ende3) + 1):
            for h in xrange(int(start4), int(ende4) + 1):
               
                current_ip = "%d.%d.%d.%d" % (j, k, l ,h)
               
                for i in source: # geht auch direkt über die Zeilen einer Datei
                    split_list = i.split(" "))
                   
                    try:
                        if split_list[2] != '':
                            ip = split_list[2]
                            if current_ip == ip:
                                target.write(i)
                                break
                               
                        else:
                            ip = split_list[3]
                            if current_ip == ip:
                                target.write(i)
                                break
                           
                    except: # was willst hier abfangen?
                        print 'oops' # daß zumindest was ausgegeben wird

target.close()
source.close()
Gruß

Dookie
xerxes_

hi dookie,
hab mir den code angeschaut, danke für die überarbeitung. ich hab versucht den code zu interpretieren unter linux mit folgenden versionen
python2 und python2.3 jedoch kommt folgende warnung

Code: Alles auswählen

sys:1: DeprecationWarning: Non-ASCII character '\xfc' in file sort.py on line 24, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
der code lässt sich auszuführen, nur beträgt das ergebnis eine zeile :).
was bedeutet das und was kann ich dagegen tun?
ich hab mir die page angeschaut jedoch weis ich nichts damit anzufangen
gruß xerxes_
xerxes_

sorry hab mich vertan, das ergebnis ist korrekt würde mich aber dennoch interessieren was diese warnung soll.
ich las irgendwas mit einem zeichensatz. man sollte einen globalen zeichensatz benutzen damit auch andere programmiern besonders aus anderen ländern gleichberechtigt sind beim lesen des codes...
gruß xerxes
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

änder mal das ü in ue

Code: Alles auswählen

for i in source: # geht auch direkt ueber die Zeilen einer Datei
ich hab leider keine _dns.log kann das Script leider nicht testen, was heist das Ergebnis beträgt eine Zeile? fehlen Zeilenumbrüche oder wird nur eine Zeile aus source nach target geschrieben?


Gruß

Dookie
xerxes_
User
Beiträge: 1
Registriert: Dienstag 22. Juni 2004, 20:25

so wie gesagt es funktioniert alles so wie es auch soll :) danke für deine hilfe. aber eins wollte ich an diesem programm noch modifizieren. ich möchte gerne commandozeilenparameter verarbeiten. ich denke mal in python gibt es sowas in der art wie argc und argv
gruß xerxes
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

jo

Code: Alles auswählen

import sys
print sys.argv
sys.argv ist eine Liste mit den Kommandozeilenparametern, der erste Eintrag ist der Name des Scripts.
Für das Auswerten von umfangreicheren Optionen gibts auch die Module getopt und optparse


Gruß

Dookie
Antworten