Seite 1 von 1
Newbe Frage (hoffentlich)
Verfasst: Montag 28. September 2009, 14:27
von may24
Hi,
Ich wollte einfach "nur" ein kleines Script schreiben das mir die Anzahl aller xml files in mienem Directory auflistet:
Code: Alles auswählen
#!/usr/bin/python
import sys
import os
import re
import array
FilesInDirAll = []
FilesInDirAll=os.walk("/d/xmlfiles/*.xml")
NumberOfFiles=len(FilesInDirAll)
print NumberOfFiles
Nu bekomme ich ständig:
TypeError: len() of unsized object
kann mir jemand helfen ?
Python: python-2.3.4-14.4.el4_6.1 (64bit)
Linux: RedHat Enterprise release 4 (Nahant Update 6)
Verfasst: Montag 28. September 2009, 14:32
von EyDu
Hallo!
"walk" liefert dir keine Liste zurück, sondern einen Generator (schaue dazu mal in die Dokumentation). Deren Länge kann man im Voraus nicht bestimmen. Wenn es nicht gerade unglaublich viele Dateien sind, dann kannst du einfach ein
benutzen.
Ich empfehle dir auch gleich noch einen Blick in PEP 8 bezüglich deiner Namen. Es sieht so aus, als hättest du vorher Java benutzt, in Python sind die Namenskonventionen ein wenig anders. So würde man hier nicht "FilesInDirAll" benutzen, sondern "files_in_dir_all". Und am besten gleich einen weniger seltsamen Namen.
Re: Newbe Frage (hoffentlich)
Verfasst: Montag 28. September 2009, 14:40
von /me
os.walk() erwartet nur ein echtes Verzeichnis und keine Platzhalter.
Verfasst: Montag 28. September 2009, 14:44
von CM
?
Ggf. noch mit os.path.join würzen, falls man anderswo suchen möchte. Nur wenn man die Files in Subdirectories ermitteln möchte, braucht es auch eine walk-Funktion.
Verfasst: Montag 28. September 2009, 14:46
von EyDu
Stimmt, sonst werden die Listen wohl sehr kurz ^^ Daher empfehle ich als Lösung einfach mal das[mod]glob[/mod]-Modul.
Edit: mod-Tag.
Verfasst: Montag 28. September 2009, 14:54
von may24
@EyDu
... ja, hab vorher Java gemacht.
Das mit den "unglaublich viele Dateien" ist so 'ne Sache. In diesem Verzeichnis liegen zwischen 30.000 und 50.000 xml Files. Ist das "viel" ?
Leider gibt's da auch ein paar Unterverzeichnisse (zwei) und noch ein paar nicht .xml Dateien.
Ich brauche aber eine Liste da die xml Dateinamen noch "weiterverarbeitet" werden. Das Script soll aber erst mal anzeigen wie viele Dateien zur Verfügung stehen (vor der Filterung...)
Verfasst: Montag 28. September 2009, 15:03
von EyDu
Wenn du die Liste eh brauchst, dann verwende CMs Vorschlag, nur dass du das Ergebnis von glob.glob vorher speicherst:
Code: Alles auswählen
spam = glob.glob(...)
print len(spam)
#und hier kannst du sie dann weiterverarbeiten
for element in spam:
#Verarbeitung von element
Brauchst du die Länge denn im Vorraus? Sonst könntest du auch so etwas machen (beachte das i bei iglob):
Code: Alles auswählen
length = 0
for element in glob.iglob(...):
#hier kannst du die Datei noch weiterverarbeiten
length += 1
Verfasst: Montag 28. September 2009, 15:14
von may24
ok, werde ich ausprobieren.
Verfasst: Montag 28. September 2009, 15:49
von Dav1d
Das wäre ne möglichkeit
Code: Alles auswählen
import sys
import os
file_number = 0
drive = '/was/weis/ich'
for root, dirs, files in os.walk(drive):
for file in files:
file_number += 1