我正在尝试制作一个文件夹创建器脚本,它的工作很好,然而,当你键入":“例如没有引号作为文件夹名称,它会做一些奇怪的事情。我写了下面的代码,试图处理任何字符,例如当有人试图使用它们命名文件夹时的字符。下面的代码似乎运行良好,但如果且仅当扩展变量中的一个字符显示为名称的第一个字符时,它才会检测到它并触发异常消息。另外,处理空白/空输入的最好方法是什么,有没有办法将其包含到下面的while循环中,或者是否应该有一个单独的while循环来处理空白输入?
如果有人输入hello:它不会启动消息并尝试继续,但会导致它无法创建文件夹,或者如果它创建了文件夹,则会给它们命名,如1,2等。
如果已经有关于这个问题的帖子了,我很抱歉,但我一直在到处寻找解决这个问题的方法,并且在来这里之前一直在测试不同的解决方法,并尝试了一些建议,但似乎没有检测到输入中的任何字符,而只检测到了第一个字符。也许我可以使用正则表达式并使用自定义集来指定这些字符,但不确定如何设置。谢谢
counter = 0
extensions = (":","?","<",">","|","/","\\") # list of characters that cannot be used for folder names
while True:
try:
folder_name = input("Name of the folder you want. ")
if folder_name in extensions: # checks the user input to see if any characters match the extensions variable.
break
else:
raise Exception
except Exception as e:
print("You can not have any of these characters in the folder name. ")
time.sleep(3.5)
cls()
发布于 2018-06-16 02:18:04
if folder_name in extensions:
不会检查您的评论所暗示的内容。请尝试匹配正则表达式。
您的基于异常的流程不是Pythonic式的。为什么不把folder_name
初始化为无效的东西,并在它仍然无效的时候循环呢?
import re
pattern = re.compile(r'[:?<>|/\\]')
folder_name = ''
while not folder_name or pattern.search(folder_name) is not None:
folder_name = input("Name of the folder you want. ")
not folder_name
进一步检查folder_name
是否为空。
发布于 2018-06-16 02:33:56
在你的代码中,"if folder_name In extensions:“这一行是有问题的,因为它会检查给定的文件夹名称是否在扩展名列表中。你需要
for a_character in extensions:
if a_character is in folder_name:
...
这是另一种方法
def check_folder_name(input_name):
# create a set that has all values to exclude
exclude = set(':"%/<>^|?\\')
# check if two sets share any elements
if set(input_name) & exclude:
print('Please remove the following characters from the folder name')
print(list(set(input_name) & exclude))
return False
else:
return True
check_folder_name('sample_correct_folder_name')
>True
check_folder_name('sample:problematic%folder^name')
>Please remove the following characters from the folder name
>[':', '%', '^']
https://stackoverflow.com/questions/50880723
复制相似问题