2017-03-16 9 views
0

ファイル名とディレクトリへのパスを取得し、ディレクトリに次の使用可能なファイル名を返します。Noneファイルの後ろにソートします。ファイル名を指定すると、ディレクトリ内の次のファイルに移動します。

There are plenty of questionsabout how to list all the files in a directoryor iterate over themが、私は、単一の次のファイル名を見つけるための最善の解決策は、前の答えの一つが発生したというリストを使用して、リスト内の現在のファイルの場所を見つけて選択することであるかどうかわからないです次の要素(または最後の要素が既にある場合はNone)。


編集:現在のファイルピッキングコードです。これは、プロジェクトの別の部分から再利用され、潜在的にネストされた一連のディレクトリからランダムなイメージを選択するために使用されます。

# picks a file from a directory 
# if the file is also a directory, pick a file from the new directory 
# this might choke up if it encounters a directory only containing invalid files 
def pickNestedFile(directory, bad_files): 
    file=None 
    while file is None or file in bad_files: 
     file=random.choice(os.listdir(directory)) 
    #file=directory+file # use the full path name 
    print "Trying "+file 
    if os.path.isdir(os.path.join(directory, file))==True: 
     print "It's a directory!" 
     return pickNestedFile(directory+"/"+file, bad_files) 
    else: 
     return directory+"/"+file 

私が今使っているプログラムは、チャットログのフォルダをとり、ランダムなログ、開始位置、長さを選ぶことです。これらは、MOTDのような一連の(通常は)短いログスニペットに処理されます。次のファイルのピッキング能力が必要なのは、長さが異常に長くなったり、開始行がファイルの最後にあるため、次のファイルの先頭に移動します(a.k.a.が真夜中に折り返します)。

上記の方法では別個のファイル名とディレクトリが慎重に与えられず、私はhave to go use a listdir and match to get an indexとにかく別の方法を使用してファイルを選択するというアイデアはありません。

+3

*「次の利用可能なファイル名」*はどのように定義しますか? – UnholySheep

+0

@UnholySheep具体的には、私はチャットログを処理しています。私はあなたのログ名に絵文字を使用する人のタイプでない限り、標準の英数字ソートはうまくいくと思います。 – cjm

答えて

1

これを使用しないようにプログラムを書き直すことを検討してください。しかし、これはあなたがそれを行う方法である:

import os 

def nextFile(filename,directory): 
    fileList = os.listdir(directory) 
    nextIndex = fileList.index(filename) + 1 
    if nextIndex == 0 or nextIndex == len(fileList): 
     return None 
    return fileList[nextIndex] 

print(nextFile("mail","test")) 
+0

ディレクトリ内のファイルのリストを作成し、開始するインデックスを選択し、必要に応じて次のファイルを取得するためにインデックスを増やす方がよいでしょうか? – cjm

+0

また、 'os.listdir()'から返された配列をループすることもできます。 – Neil

+0

しかし、あなたがこの方法を好むなら、あなたのコードです。あなたが解決策とupvoteとしてマークすることができれば、それは多くの助けになります。また、os.path()もソートすることができます。したがって、アルファベット順を強制することができます。 – Neil

関連する問題