illegals = [i for i in r'\/:*?"<>|']
# OR, using @abccd's suggestion, just use list()
illegals = list(r'\/:*?"<>|')
illegals
# ['\\', '/', ':', '*', '?', '"', '<', '>', '|']
[i for i in list(r'\/:*?"<>|')]
[c for c in r'\/:*?"<>|']
至于如何识别文件名是否包含以下任何字符,您可以这样做:
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
这只是众多方法中的一种。你甚至可以选择regex方法:
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
5条答案
按热度按时间bakd9h0s1#
使用原始字符串(通过在字符串前面放置
r
表示)。然后,将原始字符串转换为列表:请注意,
'\\'
在打印时仍然是一个反斜杠,但在值中,第一个反斜杠存储为转义字符。您可以在documentation of lexical analysis.上阅读更多内容
这回答了问题,但实际上,
string
被视为字符的list
,因此以下两个将返回相同的元素:至于如何识别文件名是否包含以下任何字符,您可以这样做:
这只是众多方法中的一种。你甚至可以选择regex方法:
92dk7w1h2#
在将字符串中的特殊字符(如
\
)插入数组之前,需要对它们进行转义,如下所示:打印它会给予你转义的反斜杠
g2ieeal73#
如果这个想法只是为了检查非法字符,那么你在这里对复杂的东西做了过度的处理。python
string
允许查找,因为它们也是迭代器。我会用下面的简单方法:缺点:必须跳过一种类型的
quote
,它 * 包围 * 字符串(在本例中为'
)blpfk2vs4#
只需在反斜杠
\
之前添加转义字符\
。变更
到
b1zrtrql5#
一般来说,我使用
l = list(r'\/:*?"<>|')
然而,有一些网站不接受这些符号,所以我只是复制了一个wiki文章:
symbols =
['!','#','$','&','(',')','*','+']
=>这些是大多数平台上接受的符号符号=
['!','#','$','&','(',')','*','+']