python 如何将符号放入列表

iyfamqjs  于 2023-05-27  发布在  Python
关注(0)|答案(5)|浏览(125)

如何放置\、/、:、*、?,“,<,>,|列成一个名单
如果我这样做:

illegalchar = ['\', '/' ,':' ,'*', '?', '"', '<', '>', '|']

分隔项的逗号将被计为包含]的字符串
PS:这是为了检查文件名是否包含非法字符(不能成为一个文件),所以如果有任何替代方法,请告诉我,谢谢!

bakd9h0s

bakd9h0s1#

使用原始字符串(通过在字符串前面放置r表示)。然后,将原始字符串转换为列表:

illegals = [i for i in r'\/:*?"<>|']

# OR, using @abccd's suggestion, just use list()

illegals = list(r'\/:*?"<>|')

illegals
# ['\\', '/', ':', '*', '?', '"', '<', '>', '|']

请注意,'\\'在打印时仍然是一个反斜杠,但在值中,第一个反斜杠存储为转义字符。
您可以在documentation of lexical analysis.上阅读更多内容
这回答了问题,但实际上,string被视为字符的list,因此以下两个将返回相同的元素:

[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
92dk7w1h

92dk7w1h2#

在将字符串中的特殊字符(如\)插入数组之前,需要对它们进行转义,如下所示:

In [2]: something = ["\\", "/"]
In [3]: something
Out[3]: ['\\', '\/']

打印它会给予你转义的反斜杠

In [12]: something = ["\\", "/"]
In [13]: something
Out[13]: ['\\', '/']
In [14]: print ', '.join(something)
\, /
g2ieeal7

g2ieeal73#

如果这个想法只是为了检查非法字符,那么你在这里对复杂的东西做了过度的处理。python string允许查找,因为它们也是迭代器。我会用下面的简单方法:

In [5]: illegalchar = '\/:*?"<>|'

In [6]: if "/" in illegalchar:
            print("nay")
   ...:
nay

缺点:必须跳过一种类型的quote,它 * 包围 * 字符串(在本例中为'

blpfk2vs

blpfk2vs4#

只需在反斜杠\之前添加转义字符\
变更

illegalchar = ['\', '/' ,':' ,'*', '?', '"', '<', '>', '|']

illegalchar = ['\\', '/' ,':' ,'*', '?', '"', '<', '>', '|']
b1zrtrql

b1zrtrql5#

一般来说,我使用l = list(r'\/:*?"<>|')
然而,有一些网站不接受这些符号,所以我只是复制了一个wiki文章:
symbols = ['!','#','$','&','(',')','*','+'] =>这些是大多数平台上接受的符号
符号= ['!','#','$','&','(',')','*','+']

相关问题