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.
#!/usr/bin/python
import sys, os, re, csv
filepath = "data/"
fileext = "csv"
print [f for f in os.listdir(filepath) if os.path.isfile(os.path.join(filepath, f)) and re.search("(.+\.%s)" % (fileext,), f)]
Man könnte noch die Prüfung auf os.path.isfile() einsparen.
Ist das der richtige Weg?
Alternativ ein Systemaufruf mit system oder popen (habe ich nicht im Kopf).
>>> import os
>>> from glob import glob
>>> directory = os.path.expanduser('~')
>>> glob(os.path.join(directory, '*.conf'))
[]
>>> [os.path.join(directory, f) for f in os.listdir(directory) if os.path.splitext(f)[1] == '.conf']
['/home/lunar/.fonts.conf']
In [1]: import os
In [2]: import fnmatch
In [3]: directory = os.path.expanduser('~')
In [4]: fnmatch.filter(os.listdir(directory), '*.conf')
Out[4]: ['.test.conf']
snafu hat geschrieben:Mich wundert wirklich, dass `glob`, wo es doch auf `fnmatch`aufbaut, nicht in der Lage ist, Dateien mit Punkt am Anfang zu finden...
glob hält sich an die Globbing-Regeln POSIX-kompatibler Shells, daher ist es gewollt, dass der Asterik alle Zeichen außer dem ersten Punkt findet, da das Punkt-Präfix versteckte Dateien kennzeichnet.
Gefährlich für was? Für das System mit Sicherheit, die Nutzer-Daten allerdings kann man auch ohne Root-Rechte prima vernichten Ein System kann man schnell wieder neu installieren, aber Daten sind ohne Backups halt einfach weg
Das ist doch unsinnig. Zum einen dupliziert man damit die Arbeit der Shell, zumal diverse Shells wie die zsh weitaus mächtigere Globbing-Features bereitstellen als die "glob()" -Funktion. Zum anderen erschwert man das Escaping: Angenommen, der Nutzer hat eine Datei mit einem Sternchen im Namen. Ruft man "glob()" nochmals manuell auf, muss der Nutzer zweimal Escapen, das erste Mal, um die Shell am Globbing zu hindern, das zweite Mal, um das Programm daran zu hindern.
"glob()" manuell aufzurufen, führt nur zu für den Benutzer unerwarteten Effekten. Anstatt manuell zu globben und der Shell damit ins Handwerk zu pfuschen, sollte man sie einfach ihre Arbeit tun lassen und einfach mit mit der sys.argv()-Liste arbeiten.