[Python-de] Dateiinformationen

Frank Raiser crashchaos at gmx.net
Fri Aug 24 20:16:26 EDT 2001


> Vielleicht ist
> 
>     open("datei").read().count("\n")
> 
> etwas schneller, weil nicht für jede einzelne Zeile Python-Strings
> angelegt und in eine Liste eingetragen werden müssen; hab's nicht
> ausprobiert.
> 
> Wenn die Datei ziemlich länglich ist und Deine Plattform das Kommando
> wc bietet (für Nichtunixisten: hat nichts mit Toiletten zu tun, sondern
> steht für "word count"), könnte sich ein "wc -l" lohnen. Vielleicht wird
> der Overhead eines separaten Prozesses (mit os.system() oder os.spawnv())
> durch die Realisierung in purem C kompensiert.
> 
> Wahrscheinlich mußt Du einen Benchmark schreiben ...
Jep.. danke für den Tipp.. hier nochmal für alle die Benchmarkergebnisse:

Für 1000mal Ermitteln der Zeilenanzahl einer Datei mit 61 Zeilen:
1. mit readlines:  127ms
2. über wc -l:    9799ms
3. mit \n count:   117ms

Für 1000mal Ermitteln der Zeilenanzahl einer Datei mit 3642 Zeilen:
1. mit readlines:  4521
2. über wc -l:    10592
3. mit \n count:   4725

Für 1000mal Ermitteln der Zeilenanzahl einer Datei mit 9196 Zeilen:
1. mit readlines: 15009
2. über wc -l:    12145
3. mit \n count:  15975

wc -l habe ich über einen popen Aufruf realisiert (also nicht in reinem C,
da ich verschiedene reine Python-Alternativen auswerten wollte)

> Kommt drauf an, was Du konkret erwartest. Das Kommando "file" (auf
> unixoiden Plattformen) gibt sich viel Mühe, den Dateityp zu identifizieren
> (und kann sich trotzdem noch irren); wäre das eine Alternative?
Das ist nicht ganz das was ich suche. Zum ersten gibt file kein einfach
auswertbares Ergebnis aus (da ja alle möglichen dateispezifischen Daten
ausgegeben werden wie z.b. Codierungen von Videos, oder Frequenzen von mp3s
usw) und zudem möchte ich nach Möglichkeit eine Python-interne Lösung
finden um nicht platformabhängig mit anderen Tools arbeiten zu müssen.

> ("Nicht alphanumerisch" ist ja auch ein unscharfer Begriff; Du mußt dabei
> eine bestimmte Codierung zu Grunde legen. Die kann ziemlich viele der
> 256 möglichen Bytewerte umfassen; denken wir mal an Druckercodes oder
> sowas wie UTF-8.)
Ich dachte dabei an eine regexp-Kombination von \w und \s. Oder muss man sich
bei sowas auch Gedanken um die Codierung machen?

-- 
Raiser, Frank aka CrashChaos
IRC: 141.30.225.9:6667 #United-Programmers

Great minds discuss ideas;
Average minds discuss events;
Small minds discuss people.



More information about the Python-de mailing list