2015-10-09 5 views
0

Я запускаю сценарий, и в качестве задачи я загружаю файл (а не из python: скажем, что пользователь загружает txt-файл из браузера) и он может быть загружен в любом месте пользователя. На следующем этапе я хочу сценарий, чтобы найти этот файл и дать мне путь для загрузки файла .. я пытался подражать следующий osacript из питонаКак найти путь к любому конкретному файлу «точно так же, как поиск», через python

cmd1 = "find ~ -type f -name \"sometextfile.txt\"" 
p = subprocess.Popen(cmd1.strip().split(" "), stdout = subprocess.PIPE) 
output, err = p.communicate() 
print output 

но это говорит не может найти «найти: ~ "

Есть ли способ, которым я могу достичь своей цели?

ответ

0

Вы можете использовать glob таким образом:

import glob 

file_ = glob.glob("sometextfile*")[0] 
0

Вы можете пройти через нужный каталог и проверить, если вы столкнулись файл:

import os 

def find_file(root_path, searched_file): 
    for root, dirs, filenames in os.walk(root_path): 
     if searched_file in filenames: 
      return os.path.join(root, searched_file) 

output = find_file(os.environ['HOME'], 'sometextfile.txt') # or whatever base directory 
+0

, например, если мой файл (list.html) является в каком-то подкаталоге Document dir .. когда я запускаю предыдущий скрипт с «list.html» вместо «sometextfile.txt», я всегда получаю следующий результат> /Users/saurabh.datta/Desktop/list.html который не является моим каталогом – user2649476

+0

Уверены, что у вас нет файла 'list.html' на вашем de sktop? Несмотря на то, что у вас может быть один в другом каталоге, эта функция возвращает только путь к первому файлу, который возникает при прохождении через ваш диск. Если вы ищете '/ Users/saurabh.datta/Example/list.html', тогда вам не повезло,' Desktop' перед 'Example'. Либо убедитесь, что имя файла уникально в каталогах, либо измените 'return' на' yield', чтобы вы могли получить несколько результатов (с помощью 'list (find_file (..., ...))'). –

+0

Это сработало. Прости – user2649476