2016-12-21 14 views
0

特定のディレクトリを探して、元の場所にあるすべてのフォルダに加えて、選択した種類のすべてのファイルを一覧表示するスクリプトを作成しようとしています。特定のファイルタイプとディレクトリのファイルを一覧表示する

私は、選択したタイプのすべてのファイルをリストする最初の部分を管理しましたが、フォルダのリストに問題が発生しています。

私が持っているコードは次のとおりです。

import datetime, os 

now = datetime.datetime.now() 

myFolder = 'F:\\' 
textFile = 'myTextFile.txt' 

outToFile = open(textFile, mode='w', encoding='utf-8') 


filmDir = os.listdir(path=myFolder) 

for file in filmDir: 
    if file.endswith(('avi','mp4','mkv','pdf')): 
     outToFile.write(os.path.splitext(file)[0] + '\n') 
    if os.path.isdir(file): 
     outToFile.write(os.path.splitext(file)[0] + '\n') 

outToFile.close() 

それは成功したが、これまでの私のF内に複数のフォルダがあるにもかかわらずif os.path.isdir(file):に入っていない、すべてのAVI/MP4/MKV/pdfファイルを一覧表示されます。ディレクトリ。

ご協力いただければ幸いです。たとえそれが仕事を完全に行うより効果的で効率的な方法を提案しているとしても。

ソリューションは

ファイルにファイルの名前ではなく、完全修飾パスを返し os.listdir
if os.path.isdir(os.path.join(myFolder, file)): 
+0

あなたはfile' 'の値が何であるか(print''となど)をチェックしましたか?それは完全修飾ですか?相対パス?ファイル名だけ? –

答えて

0

に変更ビーチ

if os.path.isdir(file): 

の息子に感謝を発見しました。

os.path.isdir()に完全修飾パス名を使用する必要があります(既にPythonにどこに表示するか指示していない限り)。

代わりに使用することができif os.path.isdir(file):を使用してのEg、:

if os.path.isdir(os.path.join(myFolder, file)): 
+0

それだけです。ありがとうございました。 – Archimedes94

+0

私は、より一般的な変数名を入れようとしていたので、それを編集してくれた方がいらっしゃいました。ありがとうございました。 – Archimedes94

+0

ようこそ。 'myFolder'がすでに正しいパス区切りを最後に持っていれば、あなたのケースでは' myFolder + file'がうまく動作することに注意してください。 'os.path.join(myFolder、file)'は、 'myFolder'が正しいパス区切りで終わるかどうかで動作するので、より安全です(現在のOSの正しいパス区切りに関係なく、どの環境でも動作します) )です。 –

関連する問題