43

全て、

ディレクトリを削除する前に、ディレクトリにデータがあるかどうかを確認する最善の方法は何ですか? wgetを使用していくつかの写真を見つけるためにいくつかのページを閲覧しています。もちろん、すべてのページに画像はありませんが、ディレクトリはまだ作成されています。

dir = 'Files\\%s' % (directory)
os.mkdir(dir)
cmd = 'wget -r -l1 -nd -np -A.jpg,.png,.gif -P %s %s' %(dir,  i[1])
os.system(cmd)
if not os.path.isdir(dir):
    os.rmdir(dir)

ファイルが作成された後にディレクトリにドロップされたかどうかをテストしたいと思います。何もない場合は...削除します。

ありがとう、アダム

4

9 に答える 9

64
import os

if not os.listdir(dir):
    os.rmdir(dir)

LBYLスタイル。EAFP
については、mouadの回答を参照してください。

于 2011-06-02T13:48:57.763 に答える
48

私はそのようにEAFPで行きます:

try:
    os.rmdir(dir)
except OSError as ex:
    if ex.errno == errno.ENOTEMPTY:
        print "directory not empty"

os.rmdirは、空でないディレクトリを削除しません。

于 2011-06-02T13:51:38.107 に答える
17

試す:

if not os.listdir(dir): 
    print "Empty"

また

if os.listdir(dir) == []:
    print "Empty"
于 2011-06-02T13:48:40.967 に答える
2

ディレクトリが存在するかどうか、およびディレクトリにコンテンツがあるかどうかを確認した場合はどうなりますか...次のようになります。

if os.path.isdir(dir) and len(os.listdir(dir)) == 0:
    os.rmdir(dir)
于 2011-06-02T13:49:00.287 に答える
1

ディレクトリが空かどうかを確認するための最速かつ最適化された方法を次に示します。

empty = False
for dirpath, dirnames, files in os.walk(dir):
    if files:
        print("Not empty !") ;
    if not files:
        print("It is empty !" )
        empty = True
    break ;

ここに記載されている他の回答は高速ではありません。通常の方法を使用するos.listdir()場合、ディレクトリにファイルが多すぎる場合、コードが遅くなりos.rmdir( )、メソッドを使用してエラーをキャッチしようとすると、そのフォルダーが単純に削除されるためです。 . 空であることを確認したいだけなら、これはやりたくないことかもしれません。

于 2018-05-14T11:47:02.020 に答える
0

フォルダーにコンテンツの回答があるかどうかを確認するBashをフォローしました。

主に、完全なリストを構築しないために、https: //stackoverflow.com/a/47363995/2402577 での @ideasman42 の回答と同様のアプローチであり、おそらく同様にDebian機能します。

空かどうかを確認するためだけに、ディレクトリの内容のリストを作成する必要はありません。


os.walk('.')ディレクトリの下の完全なファイルを返します。数千のファイルがある場合、非効率的である可能性があります。代わりに、次のコマンドfind "$target" -mindepth 1 -print -quitは最初に見つかったファイルを返し、終了します。空の文字列が返された場合は、フォルダーが空であることを意味します。

を使用してディレクトリが空であるかどうかを確認しfind、その出力を処理できます

def is_dir_empty(absolute_path):
    cmd = ["find", absolute_path, "-mindepth", "1", "-print", "-quit"]
    output = subprocess.check_output(cmd).decode("utf-8").strip()
    return not output

print is_dir_empty("some/path/here")
于 2020-05-01T16:34:19.420 に答える