Новичок в Python здесь, и я делал пример упражнения, чтобы составить список содержимого каталога, и нашел то, что я не могу объяснить своим текущим уровнем знаний.
Глядя нашаги 1,3 и 2,4, мы видим, что результаты идентичны, однако результаты не одинаковы между 1,2 и 3,4.
5 и 6 идентичны, но не расширяются в дочернюю папку, и я считаю, что это просто проблема с текстом глобуса.
Но тогда 7 бросков и ошибка и 8 дают правильные результаты!
Как мы можем объяснить вышеуказанные результаты?
Платформа: Windows 10 Python Версия: 3.6.5
Код показан ниже
import MainMenu
from pathlib import Path
import glob
def main():
menu = MainMenu.MainMenu()
operation, result = menu.show_main_menu()
if operation == 1:
# user chose file listing - result has to be path of the folder
p = Path(result)
print("result =", result)
print("p.resolve() =", p.resolve())
print("1. list(p.resolve().glob(\"./**/*\")):", list(p.resolve().glob("./**/*")))
print("2. glob.glob(result + \"./**/*\"):", glob.glob(result + "./**/*"))
print("3. list(p.resolve().glob(\"**/*\")):", list(p.resolve().glob("**/*")))
print("4. glob.glob(result + \"/**/*\"):", glob.glob(result + "/**/*"))
print("5. list(p.resolve().glob(\"**\")):", list(p.resolve().glob("**")))
print("6. glob.glob(result + \"**\"):", glob.glob(result + "**"))
print("7. list(p.resolve().glob(\"/**\")):", "Error: Non-relative patterns are unsupported")
print("8. glob.glob(result + \"/**\"):", glob.glob(result + "/**"))
if __name__ == '__main__':
main()
Ниже приведен класс MainMenu
from __future__ import unicode_literals, print_function
from prompt_toolkit import print_formatted_text
from prompt_toolkit.formatted_text import HTML, ANSI
from prompt_toolkit.formatted_text import FormattedText
from prompt_toolkit.shortcuts import prompt
from prompt_toolkit.validation import Validator
from pathlib import Path
class MainMenu:
@staticmethod
def __menu_title(text):
print_formatted_text(HTML('\n<u><b>{}</b></u>').format(text))
@staticmethod
def __validator_is_valid_choice(text):
return text == '1'
@staticmethod
def __validator_is_valid_folder_path(text):
p = Path(text)
return (p.exists() and p.is_dir())
def __init__(self):
self.validator_is_valid_choice = Validator.from_callable(
self.__validator_is_valid_choice,
error_message='Not a valid choice (has to be the number from 1).',
move_cursor_to_end=False)
self.validator_is_valid_folder_path = Validator.from_callable(
self.__validator_is_valid_folder_path,
error_message='Please specify a valid path to a folder.',
move_cursor_to_end=False)
def show_main_menu(self):
tokens = FormattedText([('bg:ansigreen ansiwhite', 'Choose option: ')])
self.__menu_title('Please select the file operation')
print_formatted_text(ANSI(' \x1b[1m1. List Files'))
result = prompt(tokens, refresh_interval=.5, validator=self.validator_is_valid_choice, validate_while_typing=True)
if result == '1':
print_formatted_text('')
return 1, self.show_enter_path_menu()
else:
return 0
def show_enter_path_menu(self):
tokens = FormattedText([('bg:ansigreen ansiwhite', 'Enter the folder path: ')])
result = prompt(tokens, refresh_interval=.5, validator=self.validator_is_valid_folder_path, validate_while_typing=True)
return result