2017-01-21 9 views
0

Сценарии должны принимать пользовательский ввод и распечатывать все содержимое папки в определенном формате. Пример: Folder1 (основная папка) -> Folder2 -> Folder3 -> Folder4.Python - ввод пользователем определенной папки в каталог, а затем печать всего содержимого каталога

Справочник содержит мнемонику (folder1) с форматом Мнемоника: Содержание

Содержание может содержать вложенные папки.

То, что я здесь бросает эту ошибку: ValueError слишком много значений для распаковки (ожидается 2, получил 1)

в этой строке: "для single_mnemonic, содержание в os.listdir (startpath): "

def search_specific_mnemonic(startpath): 
user_entered_mnemonic = input("Enter Client Mnemonic: ") 
facility_types = ["clinic", "hospital", "lab", "hub_millennium", "client_millennium"] 

for single_mnemonic, contents in os.listdir(startpath): 

    CRED = "\033[91m" 
    CEND = "\033[0m" 
    print(CRED + "\n",user_entered_mnemonic + CEND) 

    for facility_type in facility_types: 
     if contents[facility_type]: 
      box_display_char = "X" 
     else: 
      box_display_char = "_" 

     print(" [{0}] - {1}".format(box_display_char, facility_type.replace("_", " ").title())) 
     if contents[facility_type]: 
      for practice_name in sorted(contents[facility_type]): 
       print("  {}".format(practice_name)) 
       for practice_scripts in sorted(contents[facility_type]): 
        print("   {}".format(contents[facility_type][practice_name])) 
        break 
+0

@ PM2Ring Я обновил скрипт и вынул parse_directory, поскольку он не нужен для этой цели. Вот ошибка: Valueerror слишком много значений для распаковки (ожидается 2, получено 1) в этой строке «для single_mnemonic, содержимое в os.listdir (startpath):« – FFF

+0

А, ок, я этого раньше не заметил. : oops: При ближайшем рассмотрении я не понимаю несколько элементов вашего кода. 'os.listdir (startpath)' возвращает список имен файлов/папок в 'startpath'. Обычно вы перебираете эти строки с чем-то вроде 'for fname в os.listdir (startpath):'. Итак, почему у вас есть «single_mnemonic, contents»? Позже в вашем коде вы, кажется, обрабатываете «содержимое», как если бы это был словарь. –

+0

@ PM2Ring Я честно не знаю, довольно новичок в python. Мне интересно, нужно ли мне все это начинать. – FFF

ответ

0

Если вы уверены, что все имена файлов в папке находятся в том же формате
(т.е. мнемоника: содержание)
вы можете попробовать:
for single_mnemonic, contents in [format_name.split(':') for format_name in os.listdir(startpath):

Это возвращает массив, а где каждый элемент является массивом из двух сторон отформатированного имени: [[мнемоническое, содержание], [мнемоническое, содержание]]