[Python-de] such performance optimieren ???

frankimmich at gmx.de frankimmich at gmx.de
Don Aug 28 21:29:53 CEST 2003


MoinMoin, 

ich habe hier eine relativ simple Aufgabe...es funktioniert auch alles
nur leider zu langsam...vielleicht kann mir einer einen Tip gebe, wie ich 
das ganze beschleunigen kann...

Ich habe 3 Listen:

Bsp. List1:

a1|b1
c1|d3
e3|i4
...

List2:

a1|111
t1|222
e3|555
....

Liste3:

w6|666
u8|777
b1|888
....


Ablauf: Durchlaufe Liste1...also:a1|b1    (=1. Linie)
    Suche a1 in Liste2, wenn gefunden suche b1 in Liste3 und 
    gib jeweils das Pärchen aus, also
    a1 -> 111, b1 -> 888



Die Listen habe so 20 MB mit ca. 1 Mio Einträge...
Ich habe schon einiges rumprobiert, ob es besser ist die Listen komplet
einzlesen,
oder jeweils zeilenweise durchzugehen...
Naja unten ist mein Ergebnis. Leider dauert das ganze immer noch Stunden.
Ich bin für jeden Tipp dankbar, wie ich das schneller hinkriege...
Vielen Dank 
und Grüße Frank 


#!/usr/local/bin/python

import string, sys

mypath="/user1/daten/test/"
linklist_path=mypath+"Link.lis"
partlist_path=mypath+part.lis"
partlist_ci_path=mypath+part_ci.lis"
result_path=mypath+result.lis"

partlist=open(partlist_path, "r").readlines()
partlist_ci=open(partlist_ci_path, "r").readlines()
#len_linklist=len(open(linklist_path, "r").readlines())
result_list=[]
len_partlist=len(partlist)
file = open(linklist_path, "r")
line =file.readline()
count = 1


while 1:
                split1=string.strip(string.split(line, "|")[0])
                for my1line in partlist_ci:
                        if split1 == string.split(my1line, "|")[0]:
                               
ci=string.strip(string.split(my1line,"|")[1])
                                print "found ci", ci
                               
split2=string.strip(string.split(line,"|")[1])
                                for my2line in xrange(len_partlist):
                                               if split2 ==
string.split(my2line, "|")[0]:
                            ds=string.strip(string.split(my2line, "|")[1]) #
hier sind die Zeile
verrutscht...
                            result_list.append(ci+"|"+ds+"\n")
                                                        break

                                break
                #print count,len_linklist
                #count += 1
                line=file.readline()
                if not line:break
file.close()

result_file = open(result_path, "w")
result_file.writelines([x for x in result_list ])
result_file.close()


-- 
COMPUTERBILD 15/03: Premium-e-mail-Dienste im Test
--------------------------------------------------
1. GMX TopMail - Platz 1 und Testsieger!
2. GMX ProMail - Platz 2 und Preis-Qualitätssieger!
3. Arcor - 4. web.de - 5. T-Online - 6. freenet.de - 7. daybyday - 8. e-Post