os.listdir と glob.glob は同様の関数です。どちらもファイル/ディレクトリのリストを返すため、同じループには属しません(少なくとも、使用しようとしている方法ではありません)。主な違いは、os.listdir は単にディレクトリを取り、そこから基本的に (マイナス . と ..) を返すことです。glob.glob は、制限された正規表現形式で*.*
含めることができる「グロビング パターン」を想定しています。*
?
[]
ここで (glob.glob の代わりに) 考えているかもしれない関数は fnmatch.fnmatch で、単一のファイル名にグロビング パターンを適用します。
オス。listdir (パス)
パスで指定されたディレクトリ内のエントリの名前を含むリストを返します。リストは任意の順序です。特別なエントリ「.」は含まれません。および「..」は、ディレクトリに存在する場合でも。
可用性: Unix、Windows。
バージョン 2.3 で変更: Windows NT/2k/XP および Unix では、パスが Unicode オブジェクトの場合、結果 > は Unicode オブジェクトのリストになります。デコードできないファイル名は、引き続き文字列オブジェクトとして返されます。
グロブ。グロブ(パス名)
pathname に一致するパス名の空のリストを返します。これは、パス指定を含む文字列でなければなりません。パス名は絶対 (/usr/src/Python-1.5/Makefile など) または相対 (../../Tools/ / .gif など) にすることができ、シェル スタイルのワイルドカードを含めることができます。壊れたシンボリック リンクが結果に含まれます (シェルと同様)。
申し訳ありませんが、実際にファイルをモックアップしてこれをテストするのは面倒ですが、私はあなたのためにすべての作業を行います. しかし、これはうまくいくはずです(または、あなたが目指していると私が思うものに非常に近いでしょう)。;)
import os
import fnmatch
import os.path
target = 'C:\Pics'
os.chdir(target)
allfiles = os.listdir(target)
count = 500
for filename in allfiles:
if not fnmatch.fnmatch(filename, '*.jpg'):
continue
if count % 500 == 0:
dirname = 'p%04d' % count
if not os.path.exists(dirname):
os.mkdir(dirname)
target = os.path.join(dirname, '%d.jpg' % count)
os.rename(filename, target)
count += 1