2016-12-16 3 views
1

Я использую Pycharm на Mac. В приведенном ниже сценарии я вызываю функцию os.path.isfile в файле с именем dwnld.py. Он печатает «Файл существует», так как dwnld.py находится в том же каталоге сценария (/Users/BobSpanks/PycharmProjects/my scripts). Если бы я должен был поставить dwnld.py в другом месте, как сделать код ниже, найдите все подкаталоги, начиная с /Users/BobbySpanks для dwnld.py? Я пробовал читать os.path ноты, но я не мог найти то, что мне было нужно. Я новичок в Python.Python 3: поиск подкаталогов для файла

import os.path 

File = "dwnld.py" 

if os.path.isfile(File): 
    print("File exists") 
else: 
    print("File doesn't exist") 

ответ

2

Это может работать для вас:

import os 
File = 'dwnld.py' 
for root, dirs, files in os.walk('/Users/BobbySpanks/') 
    if File in files: 
     print ("File exists") 
+0

Не могли бы вы объяснить код: –

3

Попробуйте

import os 
File = "dwnld.py" 

for root, dirs, files in os.walk('.'): 
    for file in files: # loops through directories and files 
     if file == File: # compares to your specified conditions 
      print ("File exists") 

Взято из: https://stackoverflow.com/a/31621120/5135450

+0

1) Отступ, 2) вам не нужно 'os.getcwd()', просто используйте '. .'', это то же самое. 3) 'str.isfile()' не существует. –

+0

Я не знаю, почему они проголосовали за вас, у меня есть мой голос –

+0

Измените 'file.isfile (File)' на просто 'файл == Файл' (и, возможно, измените имена ради ясности). Кроме этого, это каноническое решение –

-1

что-то вроде этого, используя os.listdir (реж):

import os 
my_dirs = os.listdir(os.getcwd()) 
for dirs in my_dirs: 
    if os.path.isdir(dirs): 
     os.chdir(os.path.join(os.getcwd(), dirs) 
     #do even more 
3

Вы можете использовать glob module для этого:

import glob 
import os 

pattern = '/Users/BobbySpanks/**/dwnld.py' 

for fname in glob.glob(pattern, recursive=True): 
    if os.path.isfile(fname): 
     print(fname) 

Упрощенная версия без проверки, если dwnld.py фактически файл:

for fname in glob.glob(pattern, recursive=True): 
    print(fname) 

Теоретически, это может быть каталог прямо сейчас.

If recursive is true, the pattern '**' will match any files and zero or more directories and subdirectories.

+0

Это, вероятно, не нужно вызывать 'os.path.isfile()'. Если glob вернул его, тогда файл существует. Я думаю, что OP больше интересовался существованием, чем тип файла. –

+0

Да. В отличие от этого есть каталог, названный так. –