ディレクトリに.rarファイルがあるかどうか確認したいと思います。再帰的にする必要はありません。os.path.isfile()でワイルドカードを使用する
os.path.isfile()でワイルドカードを使用するのは私の推測でしたが、動作しません。私は何をすることができますか?
ありがとうございました。
ディレクトリに.rarファイルがあるかどうか確認したいと思います。再帰的にする必要はありません。os.path.isfile()でワイルドカードを使用する
os.path.isfile()でワイルドカードを使用するのは私の推測でしたが、動作しません。私は何をすることができますか?
ありがとうございました。
ワイルドカードはシェルによって展開されているので、あなたは(os.path.isfileでそれを使用することはできません)
ワイルドカードを使用する場合は、popen with shell = True
またはos.system()
>>> import os
>>> os.system('ls')
aliases.sh
default_bashprofile networkhelpers projecthelper.old pythonhelpers virtualenvwrapper_bashrc
0
>>> os.system('ls *.old')
projecthelper.old
0
を使用することができますglobモジュールでも同じ効果が得られます。
>>> import glob
>>> glob.glob('*.old')
['projecthelper.old']
>>>
globが必要です。
>>> import glob
>>> glob.glob('*.rar') # all rar files within the directory, in this case the current working one
os.path.isfile()
パスは、既存の通常のファイルであればTrue
を返します。これは、ファイルがすでに存在し、ワイルドカードをサポートしていないかどうかをチェックするために使用されます。 glob
です。 os.path.isfile()
を使用せずに
+1私は完全な答えを引くしようとしたとき、あなたはそれに私を打ちます。 – pyfunc
残念ながら、os.path.isfile()を使用して結果を確認することなく、ディレクトリやファイルが見つかったかどうかはまだ分かりません。 –
import os
[x for x in os.listdir("your_directory") if len(x) >= 4 and x[-4:] == ".rar"]
あなたはglob()
によって返される結果は、ファイルやサブディレクトリであるかどうかを知っているので、代わりにこのような何かをしようとしません。
import fnmatch
import os
def find_files(base, pattern):
'''Return list of files matching pattern in base folder.'''
return [n for n in fnmatch.filter(os.listdir(base), pattern) if
os.path.isfile(os.path.join(base, n))]
rar_files = find_files('somedir', '*.rar')
あなたはまた、単に3210によって返される結果をフィルタリングすることができあなたが好きなら、それはユニコードなどに関するいくつかの余分なことをする利点があります。問題がある場合、glob.pyのソースを確認してください。
[n for n in glob(pattern) if os.path.isfile(n)]
"これに利点があります"と言うと、 'glob'が有利である、あるいは' fnmatch'が利点があるということを意味しますか? –
@リチャードコーデン(ReichardCorden)、グロブが優位性を持っていることを明確にするために改訂しました。 –
iglobは、あなたが実際にRARファイルの完全なリストを望んでいないので、ここでグロブよりも良いですが、ただあなただけの少なくとも1つのファイルが存在するかどうかを気にした場合は1つのRARは
これは実際には真実ですが、この回答はより詳細な説明の恩恵を受けるでしょう。違いは、 'iglob'はイテレータを返します。一度呼び出すと何かを返すと、少なくとも1つのマッチがあったことがわかります。 – tripleee
が存在することを確認したいですあなたはファイルのリストを望んでいない:
import glob
import os
def check_for_files(filepath):
for filepath_object in glob.glob(filepath):
if os.path.isfile(filepath_object):
return True
return False
あなたはこの質問への答えを受け入れる必要があります... – GreenAsJade