2017-04-22 13 views
0

20170423のような日付を含むディレクトリのパスを見つける方法はありますか?意味は、任意の日付かもしれませんが、私は日付が含まれているフォルダを取得するまでその特定のパスを持っている..そのパターンを含む途中にいくつかのサブディレクトリがあるかもしれませんが、それは特別なケースです。適切なものを選択するためにフォルダの内容のように、より多くの精度を与える必要があります。あなたは特別なケースのために好きなdの場合はそれに打撃を与えるが、私は道に沿って1つのフォルダのみがそのパターンが含まれていることを知っている場合のために、私はスタートの方法は次のとおりです。これは私のすべてのパスを与えるPythonのディレクトリ内の特定のパスを見つける

directPaths_list = [f.path for f in os.scandir(start) if f.is_dir() ] 

開始フォルダから最後までさて、私はそれらの中に日付パターンを持つパスを返したいと思います。特にint(folder_name)が< datetime.datetime.today(

です大まかな解決策ですが、SOには非常に優れたスキルを持つ人々があり、洗練された洗練されたソリューションを提供しています。ありがとう!例えば

は、パスの開始のために= C:/これはCを返します:\ Users \ユーザーabcの\ defを\ GHI \ 20170412

私はこのような何かが仕事ができることを考えていた:

[f.path for f in os.scandir('C:\\Users\\abc\\def\\ghi\\') if f.is_dir() and str(f.path).endswith(str(2),-2,-1) ] 

答えて

1

日付を20170423とすると、それに応じて名前が付けられたファイルです。 そして、あなたがos.walk()を使用することができます。

start = "C:\\Users\\abc\\" 

for dirpath, dirnames, filenames in os.walk(start): 
    for filename in filenames: 
     if filename == "20170412": 
      filename = os.path.join(dirpath, filename) 
      print(filename) 
      print(dirpath) 

のみ単一のファイルがC:\Users\abc\def\ghi\20170412はその後、上記の出力となる存在する場合:

C:\Users\abc\def\ghi\20170412 
C:\Users\abc\def\ghi\ 

あなたはもちろん、あなたがfilename.startswith("2017")をチェックするかどうかに合うようにif文を変更することができますまたは他の何か。

警告:start = "C:\\"を行う場合が、これはつもりが終了するlooong時間がかかる可能性が高いです。これはCドライブ上のすべての単一のディレクトリを通過するためです。

C:\Users\abc\def\ghi\20170412が実際にディレクトリである場合は、同じようにその後、上記の出力は、前と同じだろう、このようにfor filename in filenames

for dirname in dirnames: 
    if dirname == "20170412": 
     dirname = os.path.join(dirpath, dirname) 
     print(dirname) 
     print(dirpath) 

を変更することができます:私はより簡潔な何かを期待していた

C:\Users\abc\def\ghi\20170412 
C:\Users\abc\def\ghi\ 

それがあなたがより簡潔に呼ぶものなら、それをリストの理解に詰めてください。

files = [os.path.join(dir, f) for dir, dirs, files in os.walk(start) for f in files if f == "20170412"] 
+0

ありがとうございました!しかし私はディレクトリを欲しがります。あなたのソリューションを 'dirnameのdirnameに' と 'dirname uniXVanXcel

+1

はい、 'dirnameのdirnameに対して'と同じようにすることができます。ファイルやディレクトリを見つけたら、親ディレクトリは 'dirpath'になります。 – Vallentin

+0

nice!私がCで始まるかどうかについてのあなたのコメントに\\私は 'os.walk(" C:\\ Users \ ... "、topdown = False)でボトムアップ検索を行うことができます' – uniXVanXcel

関連する問題