【发布时间】:2019-02-27 01:38:01
【问题描述】:
这里是 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
【问题讨论】:
-
能否提供您正在测试的代码?
-
您应该将代码复制并粘贴到您的问题中,而不是屏幕截图。它使阅读和搜索此问题变得更容易。
-
在问题中添加了代码。