Python 如何将符号放入列表中
如何将\、/、:、*、?、“、|等符号放入列表中 如果我这样做:Python 如何将符号放入列表中,python,python-3.x,Python,Python 3.x,如何将\、/、:、*、?、“、|等符号放入列表中 如果我这样做: illegalchar = ['\', '/' ,':' ,'*', '?', '"', '<', '>', '|'] illegalchar=['\'、'/'、':'、'*'、'?'、''''、'''.'] 分隔项目的逗号将计为一个字符串,包括] PS:这是为了检查文件名是否包含非法字符(无法制作成文件),所以如果有其他方法,请告诉我,谢谢 在将字符串中的特殊字符插入数组之前,需要对其进行转义,如\,如下所示:
illegalchar = ['\', '/' ,':' ,'*', '?', '"', '<', '>', '|']
illegalchar=['\'、'/'、':'、'*'、'?'、''''、'''.']
分隔项目的逗号将计为一个字符串,包括]
PS:这是为了检查文件名是否包含非法字符(无法制作成文件),所以如果有其他方法,请告诉我,谢谢 在将字符串中的特殊字符插入数组之前,需要对其进行转义,如
\
,如下所示:
In [2]: something = ["\\", "/"]
In [3]: something
Out[3]: ['\\', '\/']
打印它将给您转义的反斜杠
In [12]: something = ["\\", "/"]
In [13]: something
Out[13]: ['\\', '/']
In [14]: print ', '.join(something)
\, /
使用原始字符串(通过在字符串前面放置r
表示)。然后,将原始字符串转换为列表:
illegals = [i for i in r'\/:*?"<>|']
# OR, using @abccd's suggestion, just use list()
illegals = list(r'\/:*?"<>|')
illegals
# ['\\', '/', ':', '*', '?', '"', '<', '>', '|']
至于如何识别文件名是否包含这些字符,您可以执行以下操作:
valid_file = 'valid_script.py'
invalid_file = 'invalid?script.py'
validate = lambda f: not any(c for c in r'\/:*?"<>|' if c in f)
validate(valid_file)
# True
validate(invalid_file)
# False
valid\u file='valid\u script.py'
无效的_文件='invalid?script.py'
validate=lambda f:不存在(如果f中的c为c,则r'\/:*?“|”)
验证(有效的\u文件)
#真的
验证(无效的\u文件)
#假的
这只是众多方法之一。您甚至可以选择正则表达式方法:
import re
# Note in regex you still need to escape the slash and backslash in the match group
validate = lambda f: not re.search(r'[\\\/:*?\"<>|]+', f)
validate(valid_file)
# True
validate(invalid_file)
# False
重新导入
#注意:在正则表达式中,仍然需要在匹配组中转义斜杠和反斜杠
validate=lambda f:not re.search(r'[\\\/:*?\“\;]+',f)
验证(有效的\u文件)
#真的
验证(无效的\u文件)
#假的
如果只是为了检查非法字符,那么你在使用复杂的东西时做得太过分了。pythonstring
允许查找,因为它们也是迭代器。我将采用以下简单方法:
In [5]: illegalchar = '\/:*?"<>|'
In [6]: if "/" in illegalchar:
print("nay")
...:
nay
[5]中的:非法字符='\/:*?“|”
[6]中:如果非法字符中的“/”:
打印(“不”)
...:
不
缺点:必须跳过字符串周围的一种类型的
引号(”
)只需在反斜杠\
之前添加转义字符\
改变
illegalchar = ['\', '/' ,':' ,'*', '?', '"', '<', '>', '|']
illegalchar=['\'、'/'、':'、'*'、'?'、''''、'''.']
到
illegalchar=['\\'、'/'、':'、'*'、'?'、'''、'''.']
请尝试['\\','/',…
此操作不需要列表。字符串更紧凑:illegalchar=['\\/:*?“|”]
。但你还是要避开反斜杠,@KlausD.与\?我在某处听到过,但我忘了,我想再次确认一下,无论如何,谢谢!听起来像是通过模块为一个好的旧正则表达式找工作?@pstatix抱歉,我还没有了解正则表达式,对Python还是很陌生,[i for i in r'/:*?“|]
?你可以做列表(r'\/:*?“|”)达到同样的效果,但即使这样也不需要。@DyZ我在事实列表()之后意识到
很好。虽然我知道您可以将字符串解释为单个字符的列表,但OP特别询问如何将它们放入列表中。不必错过一种引号。您可以通过添加反斜杠来转义环绕引号中的字符。它看起来是这样的:\'
illegalchar = ['\', '/' ,':' ,'*', '?', '"', '<', '>', '|']
illegalchar = ['\\', '/' ,':' ,'*', '?', '"', '<', '>', '|']