Liste mit Dateinamen (ls *.ext)

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.
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Liste mit Dateinamen (ls *.ext)

Beitragvon whaeva » Sonntag 29. März 2009, 14:26

Ich brauche eine Liste mit den Namen aller Dateien bestimmter Endung:

Code: Alles auswählen

#!/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).
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Beitragvon fred.reichbier » Sonntag 29. März 2009, 14:33

Du könntest auch glob verwenden.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Sonntag 29. März 2009, 14:42

Deine re-Überprüfung macht man am besten mit `.endswith(ext)'
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Beitragvon whaeva » Sonntag 29. März 2009, 15:25

Sehr aufschlußreich, danke. Habe das Rad wohl neu erfunden. Werde glob() benutzen.
lunar

Beitragvon lunar » Sonntag 29. März 2009, 15:36

fred.reichbier hat geschrieben:Du könntest auch glob verwenden.

Dateien, die mit einem Punkt beginnen, werden von glob nicht gefunden:

Code: Alles auswählen

>>> 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']
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Beitragvon fred.reichbier » Sonntag 29. März 2009, 18:15

Hm. Dann vielleicht fnmatch? :D

Code: Alles auswählen

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']
Benutzeravatar
snafu
User
Beiträge: 5427
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Sonntag 29. März 2009, 18:20

Mich wundert wirklich, dass `glob`, wo es doch auf `fnmatch`aufbaut, nicht in der Lage ist, Dateien mit Punkt am Anfang zu finden...
shcol (Repo | Doc | PyPi)
lunar

Beitragvon lunar » Sonntag 29. März 2009, 18:29

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 29. März 2009, 20:50

Wäre ja auch unpraktisch wenn das Globbing in ``rm *`` auch ``..`` findet und dann den übergeordneten Ordner auch gleich mitlöscht.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Sonntag 29. März 2009, 21:18

rm ohne -r löscht keine Ordner :P
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Montag 30. März 2009, 13:31

klassischer Fall von:

Code: Alles auswählen

alias rm = rm -rf

;)
lunar

Beitragvon lunar » Montag 30. März 2009, 16:19

Da lebt jemand gerne gefährlich ... ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Montag 30. März 2009, 18:26

lunar hat geschrieben:Da lebt jemand gerne gefährlich ... ;)

Code: Alles auswählen

alias rm = sudo rm -rf

Wärs so nicht noch gefährlicher? ;-)
lunar

Beitragvon lunar » Montag 30. März 2009, 18:30

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 ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Montag 30. März 2009, 18:41

Also nen Kumpel von mir hatte sich mal vor zig Jahren vertippt als er in "/" war:

Code: Alles auswählen

rm -r /home/irgendwas/nochwas/ *

Man beachte das böse Leerzeichen :twisted:
Seit dem navigiert er vor solch einem Vorgang deutlich vorsichtiger ;-)

Wer ist online?

Mitglieder in diesem Forum: harryberlin