1

Pythonを使用してディレクトリから単一のファイルを取得するための最も効率的で最速の方法は何ですか?

私の特定の問題の詳細:
事前に生成されたファイルを多数含むディレクトリがあり、ランダムなファイルを選択したいだけです。最初にすべてのファイルを一覧表示する以外に、ディレクトリからランダムなファイルを選択する効率的な方法はないことを知っているので、ファイルはすでにランダムな名前で生成されているため、すでにランダムに並べ替えられています。最初のファイルを選択するだけです。フォルダからのファイル。

だから私の質問は、ディレクトリからファイルのリスト全体をロードすることなく、フォルダから最初のファイルを選択するにはどうすればよいですか(OSにそれを実行させることもできません。私の最適な目標は、OSに私を返すように強制することです。単一のファイルを停止してから停止してください!)。

注:ディレクトリにたくさんのファイルがあるので、1つだけを選択するためにすべてのファイルをリストすることを避けたいのはなぜですか。

注2:各ファイルは1回だけ選択され、次に削除されて、次回は新しいファイルのみが選択されるようにします(したがって、ある種のランダム性が保証されます)。

解決

私はついに、以下を保存するインデックスファイルを使用することを選択しました。

  • 選択する現在のファイルのインデックス(例:file1.extの場合は1、file2.extの場合は2など)
  • 最後に生成されたファイルのインデックス(例:file1999.extの場合は1999)

もちろん、これは私のファイルがランダムな名前で生成されなくなったことを意味しますが、決定論的な増分可能なパターンを使用します(例: "file%s.ext"%ID)

したがって、2つの主要な操作にほぼ一定の時間があります。

  • フォルダ内の次のファイルにアクセスする
  • 残っているファイルの数を数えます(必要なときにバックグラウンドスレッドで新しいファイルを生成できるようにするため)。

これは私の問題に対する特定の解決策です。より一般的な解決策については、受け入れられた回答をお読みください。

また、Pythonを使用してファイルへのアクセスとディレクトリウォーキングを最適化するために私が見つけた他の2つのソリューションに興味があるかもしれません。

4

3 に答える 3

2

1つのディレクトリに事前に生成されたファイルをたくさん持たないでください。ディレクトリ内に「n」を超えるファイルがある場合は、それらをサブディレクトリに分割します。

于 2012-11-14T12:05:59.363 に答える
1

結果に使用するだけrandom.choice()ですos.listdir()

import random
import os

randomfilename = random.choice(os.listdir(path_to_directory))

os.listdir()OSによって指定された順序で結果を返します。ランダムなファイル名を使用してもその順序は変わりません。ディレクトリにアイテムを追加したり、ディレクトリからアイテムを削除したりするだけで、その順序に影響を与えることができます。

ファイルが多すぎるのではないかと心配な場合は、単一のディレクトリを使用しないでください。代わりに、事前に生成された名前でディレクトリのツリーを設定し、それらの1つをランダムに選択してから、そこからファイルを選択します。

于 2012-11-14T12:02:27.170 に答える
1

ファイルを作成するときに、テキストファイルに保存されているリストに最新のファイルの名前を追加します。ファイルの読み取り/処理/削除を行う場合:

  1. テキストファイルを開きます
  2. ファイル名をリストの一番上の名前に設定します。
  3. リストの一番上から名前を削除します
  4. テキストファイルを閉じます
  5. ファイル名を処理します。
于 2012-11-14T13:46:25.800 に答える