Der beste Weg, um eine zufällige Datei aus einem Verzeichnis zu wählen
Was ist der beste Weg zu wählen, eine zufällige Datei aus einem Verzeichnis in Python?
Edit: Hier ist, was ich Tue:
import os
import random
import dircache
dir = 'some/directory'
filename = random.choice(dircache.listdir(dir))
path = os.path.join(dir, filename)
Ist dies besonders schlecht, oder ist es vor allem besseren Weg?
InformationsquelleAutor der Frage JasonSmith | 2009-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bezüglich Ihrer bearbeiteten Frage: Erstens, ich nehme an, Sie wissen, die Risiken bei der Verwendung einer
dircache
sowie die Tatsache, dass es veraltet seit Version 2.6, und entfernt 3.0.Zweite von all, kann ich nicht sehen, wo irgendeine race-condition existiert hier. Ihre
dircache
- Objekt ist im Prinzip unveränderlich (nach Verzeichnis Liste ist gecached, es wird nie wieder gelesen), so dass kein Schaden bei der gleichzeitigen liest daraus.Andere als das, ich verstehe nicht, warum Sie ein problem mit dieser Lösung. Es ist in Ordnung.
InformationsquelleAutor der Antwort Yuval Adam
Sprachneutral Lösung:
1) Holen Sie sich die Summe nicht. der Dateien im angegebenen Verzeichnis.
2) Wählen Sie eine zufällige Zahl von 0 bis [total no. der Dateien - 1].
3) die Liste der Dateinamen als eine entsprechend indizierte Sammlung oder so.
4) Wählen Sie das N-te element, wobei n die zufällige Anzahl.
InformationsquelleAutor der Antwort karim79
Wenn Sie möchten, dass die Verzeichnisse enthalten, Yuval Eine Antwort. Ansonsten:
InformationsquelleAutor der Antwort mavnn
Das problem mit den meisten der Lösungen gegeben ist, laden Sie all Ihre Eingaben in den Speicher, was ein problem sein kann für große Eingänge/Hierarchien. Hier ist eine angepasste Lösung aus Das Perl-Kochbuch von Tom Christiansen und Nat Torkington. Um eine zufällige Datei irgendwo unter einem Verzeichnis:
Verallgemeinerung ein bisschen macht, ein nützliches Skript:
InformationsquelleAutor der Antwort keithpjolley
Unabhängig von der verwendeten Sprache können Sie Lesen, alle Verweise auf die Dateien in einem Verzeichnis in einem datastructure wie ein array (so etwas wie 'listFiles'), die Länge des Arrays. berechnet eine Zufallszahl im Bereich von '0' bis 'arrayLength-1' und den Zugriff auf die Datei an dem bestimmten index. Diese Arbeit sollte nicht nur in python.
InformationsquelleAutor der Antwort Mork0075
Wenn Sie nicht wissen, bevor die hand, welche Dateien dort sind, können Sie brauchen, um sich eine Liste, dann wählen Sie einfach eine zufällige index in der Liste.
Hier ist ein Versuch:
BEARBEITEN: Die Frage ist nun erwähnt die Angst vor einem "race condition", die ich nur annehmen können, ist das typische problem der Dateien, die Hinzugefügt/entfernt, während Sie in den Prozess, zu versuchen, wählen Sie eine zufällige Datei.
Ich glaube nicht, dass es eine Weise um, dass, außer wenn man bedenkt, dass jede I/O-operation ist grundsätzlich "unsicher", d.h. es kann scheitern. So, der Algorithmus zum öffnen einer zufällig ausgewählten Datei in einem bestimmten Verzeichnis sollte:
open()
die Datei ausgewählt, und handle einen Fehler, da die Datei möglicherweise nicht mehr da seinInformationsquelleAutor der Antwort unwind