2016-07-04 5 views
1

私は並べ替えるファイルがたくさんあります。Pythonのディレクトリにファイルのリストを作成するには

ディレクトリ内のファイル(またはフォルダのみ)の名前のリストを取得しようとしています。

path = 'C:\\test\\' 
items = os.listdir(path) #this gives me a list of both files and folders in dir 

for name in items: 
    if os.path.isfile(path + '\\' + name) == True: 
     items.remove(name) 

私はitemsがフォルダの名前で構成されると予想しました。しかし、ファイル名の半分も持っています。

items.remove(name)の代わりにprint(name)を使用すると正しく印刷されます。

答えて

5

これは、あなたがそれを繰り返している間、あなたが "items"リストを変更しようとしていると思われます。これを行うことは決して良い考えではありません。そして、これによって特定の要素がスキップされる可能性があります。そのため、すべてのファイルが削除されていません。 forループの代わりに、このようなことをしてください。

items = [item for item in items if isfile(join(path, item))] 

結合機能はos.pathにあります。そして、バックスラッシュを自分で追加する代わりにそれを使うべきです。

2

私はそうのように、リスト内包でos.path.isdir()を使用します。フォルダの

items = [f for f in os.listdir(path) if os.path.isdir(os.path.join(path, f))] 

ファイルの場合:

items = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))] 

これは、フォルダやファイルのリスト全体の前を構築しますアイテムの削除を開始します。

関連する問題