Se non si conosce in anticipo quali file ci sono, sarà necessario ottenere un elenco, quindi selezionare un indice casuale nell'elenco.
Ecco un tentativo:
import os
import random
def getRandomFile(path):
"""
Returns a random filename, chosen among the files of the given path.
"""
files = os.listdir(path)
index = random.randrange(0, len(files))
return files[index]
EDIT: La questione ora parla di un timore di una "race condition", che posso solo supporre è il problema tipico dei file viene aggiunto/rimosso mentre si è nel processo di cercare di scegliere un file casuale.
Non credo che ci sia un modo per aggirare questo, oltre a tenere a mente che qualsiasi operazione di I/O è intrinsecamente "non sicura", cioè può fallire. Quindi, l'algoritmo per aprire un file scelto a caso in una data directory dovrebbe:
- realtà
open()
il file selezionato, e gestire un fallimento, dal momento che il file potrebbe non essere più lì
- Probabilmente si limita a un set numero di tentativi, in modo che non muore se la directory è vuota o se nessuno dei file sono leggibili
Scusate ragazzi, ho presentato accidentalmente prima che finissi di entrare la mia domanda. Non dovrebbe cambiare molto però. – JasonSmith
Potrebbe chiarire il problema delle condizioni di gara? Suppongo che tu voglia selezionare e aprire un file senza finestre intermedie (quando qualcuno potrebbe eliminarlo tra scelta e tentativo di apertura() ad esempio), ma potrebbe essere utile dichiararlo esplicitamente (supponendo che ti sto interpretando correttamente). – Brian
È la condizione di competizione perché più processi lo faranno contemporaneamente? O si verificherà la condizione della gara perché c'è uno scrittore che crea file e questo lettore che li sta selezionando? –