.txt Dateien in einem Ordner zählen

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.
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

Donnerstag 8. Januar 2009, 12:08

Hallo,

ich habe ein für einen Anfäner unüberwindliches Problem: Ich habe eine unbekannte Anzahl .txt Dateien in einem Unterordner eines Python Programms. Wie kann ich die Anzahl der momentan vorhandenen Dateien zählen?

zähle (c\ordner/Python/Ordner)

Gruß und vielen Dank
lunar

Donnerstag 8. Januar 2009, 12:13

Code: Alles auswählen

from glob import glob

print len(glob('**/*.txt'))
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Donnerstag 8. Januar 2009, 12:16

Code: Alles auswählen

import os

len(filter(lambda x: x.endswith(".txt"), os.listdir(ordnername)))
# Ohne len hast du gleich die Liste der Dateinamen mit .txt

# Mit Generator Expression:

len(txtdateiname for txtdateiname in os.listdir(ordnername) if txtdateiname.endswith(".txt"))
Nergal
User
Beiträge: 72
Registriert: Montag 6. Oktober 2008, 14:02

Donnerstag 8. Januar 2009, 12:17

Code: Alles auswählen

import os

Folder = "C:\\"
Counter = 0
Files = os.listdir(Folder)

for File in Files:
    [Dummy, Ext] = os.path.splitext(File)
    if Ext == ".txt":
        Counter += 1
So würd ich es machen. Kann aber gut sein, daß es noch einfacher geht. Arbeite mit Python noch nicht wirklich lange.

/edit Zu langsam und es geht scheinbar einfacher :)
BlackJack

Donnerstag 8. Januar 2009, 13:42

@str1442: `len()` auf Generatoren geht nicht. Da würde aber eine Lösung mit `sum()` gehen:

Code: Alles auswählen

In [81]: sum(1 for f in os.listdir('.') if f.endswith('.txt'))
Out[81]: 19
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Donnerstag 8. Januar 2009, 14:46

@Nergal:
In deinem Schleifenkopf solltest Du vor dem splitten auf jeden Fall noch mit os.path.isfile(os.path.join(Ordner, File) prüfen, ob es sich bei File tatsächlich um eine Datei handelt. os.listdir() liefert nämlich alle Elemente aus einem Verzeichnis zurück, also neben Dateien auch: Unterordner, Mounts(#Unix) und Links(#Unix).

>>Masaru<<
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Donnerstag 8. Januar 2009, 15:14

Hm, hatte ich noch nie ausprobiert, aber stimmt, Danke für den Hinweis - sum(1 ist eine nette Idee :)
Mounts(#Unix) und Links(#Unix).
Die auch nichts anderes als Dateien / Ordner sind, aber von os.path.isfile() nicht so behandelt werden.
lunar

Donnerstag 8. Januar 2009, 16:34

str1442 hat geschrieben:
Mounts(#Unix) und Links(#Unix).
Die auch nichts anderes als Dateien / Ordner sind, aber von os.path.isfile() nicht so behandelt werden.

Code: Alles auswählen

>>> os.path.islink('/home/lunar/bin/dos2unix')
True
>>> os.path.isfile('/home/lunar/bin/dos2unix')
True
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Donnerstag 8. Januar 2009, 17:06

Ok, bei Links funktioniert es wenn der Link auf eine Datei zeigt, ich hatte natürlich einen symbolischen Link auf einen Ordner getestet :roll:

Bei Character und Block Devices wie /dev/null oder /dev/sda1 hingegen bekomme ich False.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Donnerstag 8. Januar 2009, 17:20

... was ja auch der Erwartung entspricht ;).
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Donnerstag 8. Januar 2009, 17:44

Im Grunde ist aber alles eine Datei was sich irgendwie über das Dateisystem erreichen lässt, insbesondere unter Unix. isfile testet auf "reguläre" Dateien, mir gings hierum:
also neben Dateien
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Donnerstag 8. Januar 2009, 18:02

Ahhh .... du wolltest Korinthen kacken, eh? :D Sag das doch gleich.
lunar

Donnerstag 8. Januar 2009, 20:15

str1442 hat geschrieben:Im Grunde ist aber alles eine Datei was sich irgendwie über das Dateisystem erreichen lässt, insbesondere unter Unix.
Das ist jetzt ein bisschen sehr kleingeistig, und interessiert einen Programmierer im Userspace auch nur bedingt, schließlich verhalten sich Verzeichnisse und Dateien de facto unterschiedlich und werden auch mit unterschiedlichen APIs gelesen.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Donnerstag 8. Januar 2009, 20:39

Mir stiess vorallem die Bezeichnung der Mounts auf, denn einerseits habe ich den Begriff direkt nie gehört und zweitens wusste ich anfangs nicht, was Masaru damit nun meint. Entweder nämlich Device Dateien (und in der Gegend um /dev gibt es eher keine "regulären" Dateien) oder gemountete Devices, also (idR) einfache Ordner. Deswegen erschien es mir wichtig, darauf hinzuweisen, daß es eben keine was auch immer für gearteten Spezial Objekte sind.
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

Freitag 30. Januar 2009, 10:20

Ich danke euch allen, für eure Beiträge. Die Lösung ist gefunden und funktioniert wunderbare.

@str1442: Deinen Lösungsvorschlag gefiel mir am besten und ließ sich wunderbar in mein Programm integrieren, vieln Dank!

Viele Grüße
py-mule
Antworten