Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将符号放入列表中_Python_Python 3.x - Fatal编程技术网

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文件)
#假的

如果只是为了检查非法字符,那么你在使用复杂的东西时做得太过分了。python
string
允许查找,因为它们也是迭代器。我将采用以下简单方法:

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 = ['\\', '/' ,':' ,'*', '?', '"', '<', '>', '|']