Pythonを使用して、ファイルシステムの検索に基づいてファイル情報オブジェクトの配列を取得するにはどうすればよいですか?
質問
現在、 find
コマンドを実行するbashスクリプトがあります:
find /storage/disk-1/Media/Video/TV -name *.avi -mtime -7
これにより、過去7日間にシステムに追加されたテレビ番組のリストが取得されます。次に、最新のテレビ番組にアクセスできるように、シンボリックリンクを作成します。
これをPythonで再コーディングしたいと思っていますが、Googleを使用するための答えを見つけることができるいくつかの質問があります(おそらく正しいことを検索していないのです)。これをまとめる最良の方法は、質問をすることだと思います:
ファイルシステムで検索を実行するには( find
を呼び出す必要がありますか?)、ファイル情報オブジェクト(変更日、ファイル名などを含む)の配列を取得します。日付などに基づいて並べ替えることができますか?
解決
import os, time
allfiles = []
now = time.time()
# walk will return triples (current dir, list of subdirs, list of regular files)
# file names are relative to dir at first
for dir, subdirs, files in os.walk("/storage/disk-1/Media/Video/TV"):
for f in files:
if not f.endswith(".avi"):
continue
# compute full path name
f = os.path.join(dir, f)
st = os.stat(f)
if st.st_mtime < now - 3600*24*7:
# too old
continue
allfiles.append((f, st))
これは、ペアのリスト(ファイル名、統計結果)としても返されたすべてのファイルを返します。
他のヒント
モジュールosを調べます:os.walkはファイルシステムをウォークする関数です。os.pathはファイルにmtimeおよびその他のファイル情報を与えるモジュールです。また、os.pathは、ファイル名を解析および分割するための多くの関数を定義します。
また、モジュールglobは、「グロビング」用の関数を定義します。文字列(Unixワイルドカードルールを使用した文字列の一致)
これにより、ある基準に一致するファイルのリストを簡単に作成できます。
- &quot; find&quot;を使用できます。 「サブプロセス」を通じてモジュール。
- その後、「分割」を使用します各行を分析する文字列関数
- 各ファイルについて、OSモジュール(getmtimeなど)を使用してファイル情報を取得します
または
- &quot; walk&quot;を使用しますおよび「glob」オブジェクト内のファイルパスを取得するモジュール
所属していません StackOverflow