あなたが解決しようとしているいくつかの問題と、解決策のためのいくつかのオプションがあります。
1番目-自然にソートされたものを探していますか?
/path/to/folder/
subfolder01/
test1.png
test2.png
test3.png
test10.png
test11.png
もしそうなら...あなたは自然ソートメソッドを作成する必要があります。英数字の並べ替えに満足している場合:
/path/to/folder/
subfolder01/
test1.png
test10.png
test11.png
test2.png
test3.png
その後、標準の並べ替えが機能します。ファイルの並べ替え方法に応じて、結果のインデックスは異なります。
システムからディレクトリとファイルを取得するには、2つの方法のいずれかを実行できます。どちらが高速か100%確実ではないため、両方をテストしてください。答えをチャンクに分割して、最適と思われる方法でまとめることができるようにします。
パート01:初期化
import os
import sys
try:
searchpath = sys.argv[1]
except IndexError:
print 'No searchpath supplied'
sys.exit(0)
basepath, searchname = os.path.split(searchpath)
パート02:フォルダとファイルの収集
オプション#1:os.listdir + os.path.isfile
files = []
folders = []
for filepath in os.listdir(basepath):
if ( os.path.isfile(filepath) ):
files.append(filepath)
else:
folders.append(folder)
オプション#2:os.walk
# we only want the top level list of folders and files,
# so break out of the loop after the first result
for basepath, folders, files in os.walk(basepath):
break
パート03:インデックスの計算
オプション#1:並べ替えなし-システムから得られるものは、得られるものです
# no sorting
try:
index = len(folders) + files.index(searchname)
except IndexError:
index = -1
オプション#2:英数字の並べ替え
# sort alpha-numerically (only need to sort the files)
try:
index = len(folders) + sorted(files).index(searchname)
except IndexError:
index = -1
オプション#3:自然順
# natural sort using the projex.sorting.natural method
import projex.sorting
sorted_files = sorted(files, projex.sorting.natural)
try:
index = len(folders) + sorted_files.index(searchname)
except IndexError:
index = -1
パート04:結果のログ
# if wanting a 1-based answer
index += 1
print index
自然順付けについては質問の一部ではなかったので、ここでは詳しく説明しません。ここには、アドバイス付きで見つけることができる他のフォーラムがあると思います。projex.sortingモジュールは私が作成したものであり、正確な実装を確認したい場合は、http ://dev.projexsoftware.com/projects/projexから入手できます。
これが結果の違いであると言えば十分です:
>>> import pprint, projex.sorting
>>> files = ['test2.png', 'test1.png', 'test10.png', 'test5.png', 'test11.png']
>>> print files.index('test10.png')
2
>>> print sorted(files).index('test10.png')
1
>>> print sorted(files, projex.sorting.natural).index('test10.png')
3
>>> print files
['test2.png', 'test1.png', 'test10.png', 'test5.png', 'test11.png']
>>> print sorted(files)
['test1.png', 'test10.png', 'test11.png', 'test2.png', 'test5.png']
>>> print sorted(files, projex.sorting.natural)
['test1.png', 'test2.png', 'test5.png', 'test10.png', 'test11.png']
ですから、それを扱うときはそれを覚えておいてください。
乾杯!