286

Pythonでは、現在のディレクトリにあるすべてのファイルのみを一覧表示したいと思います。サブディレクトリまたは親からファイルを一覧表示したくありません。

そこに同様の解決策があるように見えますが、それらは私にとってはうまくいかないようです。これが私のコードスニペットです:

import os
for subdir, dirs, files in os.walk('./'):
    for file in files:
      do some stuff
      print file

現在のディレクトリ内にholygrail.pyとTimの2つのファイルがあるとします。私にもフォルダがあり、その中に2つのファイル(ArthurとLancelotと呼びましょう)が含まれています。スクリプトを実行すると、次のようになります。

holygrail.py
Tim
Arthur
Lancelot

holygrail.pyとTimに満足しています。しかし、ArthurとLancelotの2つのファイルは、リストに載せたくありません。

4

8 に答える 8

478

の代わりにos.listdirandを使用してください。os.path.isfileos.walk

例:

import os
files = [f for f in os.listdir('.') if os.path.isfile(f)]
for f in files:
    # do something

ただし、これを他のディレクトリに適用する場合は注意が必要です。

files = [f for f in os.listdir(somedir) if os.path.isfile(f)].

fはフルパスではなく、現在のディレクトリに相対的であるため、これは機能しません。

したがって、別のディレクトリでフィルタリングするには、os.path.isfile(os.path.join(somedir, f))

(ヒントをくれたCausalityに感謝します)

于 2012-08-15T12:09:55.920 に答える
81

os.listdirこの目的に使用できます。ディレクトリではなくファイルのみが必要な場合は、を使用して結果をフィルタリングできます。os.path.isfile

例:

files = os.listdir(os.curdir)  #files and directories

また

files = filter(os.path.isfile, os.listdir( os.curdir ) )  # files only
files = [ f for f in os.listdir( os.curdir ) if os.path.isfile(f) ] #list comprehension version.
于 2012-08-15T12:09:25.503 に答える
26
import os

destdir = '/var/tmp/testdir'

files = [ f for f in os.listdir(destdir) if os.path.isfile(os.path.join(destdir,f)) ]
于 2014-06-10T09:39:29.810 に答える
13

を使用できますos.scandir()。stdlibの新しい関数はPython3.5から始まります。

import os

for entry in os.scandir('.'):
    if entry.is_file():
        print(entry.name)

よりも速いos.listdir()os.walk() を実装し os.scandir()ます。

于 2016-10-24T10:37:19.807 に答える
9

モジュールを使用できpathlibます。

from pathlib import Path
x = Path('./')
print(list(filter(lambda y:y.is_file(), x.iterdir())))
于 2019-11-08T17:46:30.817 に答える
7

これはos.walk()で実行できます

python3.5.2テスト済み。

import os
for root, dirs, files in os.walk('.', topdown=True):
    dirs.clear() #with topdown true, this will prevent walk from going into subs
    for file in files:
      #do some stuff
      print(file)

dirs.clear()行を削除すると、サブフォルダー内のファイルが再び含まれます。

参照で更新;

os.walkはここに文書化されており、作成されているトリプルリストとトップダウン効果について説明しています。

リストを空にするためにここに文書化された.clear()

したがって、os.walkから関連リストをクリアすることで、その結果をニーズに合わせることができます。

于 2016-09-24T13:34:35.777 に答える
4

の代わりにos.walkos.listdir

于 2012-08-15T12:09:15.487 に答える
4
import os
for subdir, dirs, files in os.walk('./'):
    for file in files:
      do some stuff
      print file

del dirs[:]次のようになるこのコードを改善することができます。

import os
for subdir, dirs, files in os.walk('./'):
    del dirs[:]
    for file in files:
      do some stuff
      print file

または、現在の作業ディレクトリでos.walkを指定できればさらに良いでしょう。

import os
cwd = os.getcwd()
for subdir, dirs, files in os.walk(cwd, topdown=True):
    del dirs[:]  # remove the sub directories.
    for file in files:
      do some stuff
      print file
于 2018-02-25T15:09:11.360 に答える