[Python-de] Dateiinformationen

Detlef Lannert lannert at uni-duesseldorf.de
Fri Aug 24 18:55:55 EDT 2001


On Fri, Aug 24, 2001 at 04:32:14PM -0200, Frank Raiser wrote:
> Kennt jemand eine Möglichkeit die Zeilenanzahl einer (Text-)Datei schneller
> zu ermitteln als auf diese Weise:
> 
> ---
>   f = open('datei')
>   num_lines = len(f.readlines())
>   f.close()
> ---
> 
> Ich bin v.a. an einer Realisierung ohne nativen Code interessiert (aber wenns
> entsprechend schnelleren Code auf nativer Ebene gibt wär das natürlich auch
> nicht zu verachten :)

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 ...

> Wie kann man schnell feststellen ob eine Datei binäre Daten oder Textdaten
> enthält? Ich habe mir überlegt mittels re die ersten x Zeichen der Datei auf
> nicht alphanumerische Zeichen zu testen. Aber das ist natürlich nicht gerade
> der eleganteste Weg. Kennt da jemand eine bessere Möglichkeit?

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?

("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.)

Hth,
  Detlef



More information about the Python-de mailing list