如何以正确的方式写出以下带有特殊字符的数组?
How to write in the correct way the following array with special characters?
我想清理文件名,但只针对不允许的特殊字符:
char_not_supported_by_file_name = ['\', '/', ':', '*', '?', '"', '<', '>', '|']
tmp_file_name= file
for c in char_not_supported_by_file_name:
if c in tmp_file_name:
tmp_file_name = tmp_file_name.replace(c, '_')
我试着写这个列表,检查我要清理的文件名是否有我不想要的 9 个特殊字符之一,并用下划线替换它,但我的 IDE 说数组写错了。怎样写才正确?
如果您在引号前加上反斜杠,它就会被转义。换句话说,它将是字符串中的一个字符,而不是标记字符串的结尾。您必须用另一个反斜杠转义第一个反斜杠:
char_not_supported_by_file_name = ['\', '/', ':', '*', '?', '"', '<', '>', '|']
此外,replace
如果找不到需要替换的字符的任何实例,则不会执行任何操作,因此您可以省略 if
检查:
for c in char_not_supported_by_file_name:
tmp_file_name = tmp_file_name.replace(c, '_')
如果您熟悉正则表达式,可以使您的代码更简洁的方法是使用正则表达式而不是数组:
import re
tmp_file_name = file
tmp_file_name = re.sub(r'[\/:*?\"<>|]', '_', tmp_file_name)
这也解决了您原来的问题,即数组第一个元素 '\'
中的反斜杠正在转义结束引号并将其转换为 '
文字而不是关闭反斜杠周围的引号。
如果你愿意导入模块,这可以不用循环来完成,使用 re.sub
:
import re
file_name = "this/is:a*very?bad\example>of<a|filename"
res = re.sub("[\\/:*?\"<>|]", "_", file_name)
print(res)
# this_is_a_very_bad_example_of_a_filename
注意 \
反斜杠需要三倍甚至四倍,具体取决于确切位置。阅读 及其副本以获取更多信息。原因是那些反斜杠被转义了两次:一次由解释器转义,然后一次由 re
.
我想清理文件名,但只针对不允许的特殊字符:
char_not_supported_by_file_name = ['\', '/', ':', '*', '?', '"', '<', '>', '|']
tmp_file_name= file
for c in char_not_supported_by_file_name:
if c in tmp_file_name:
tmp_file_name = tmp_file_name.replace(c, '_')
我试着写这个列表,检查我要清理的文件名是否有我不想要的 9 个特殊字符之一,并用下划线替换它,但我的 IDE 说数组写错了。怎样写才正确?
如果您在引号前加上反斜杠,它就会被转义。换句话说,它将是字符串中的一个字符,而不是标记字符串的结尾。您必须用另一个反斜杠转义第一个反斜杠:
char_not_supported_by_file_name = ['\', '/', ':', '*', '?', '"', '<', '>', '|']
此外,replace
如果找不到需要替换的字符的任何实例,则不会执行任何操作,因此您可以省略 if
检查:
for c in char_not_supported_by_file_name:
tmp_file_name = tmp_file_name.replace(c, '_')
如果您熟悉正则表达式,可以使您的代码更简洁的方法是使用正则表达式而不是数组:
import re
tmp_file_name = file
tmp_file_name = re.sub(r'[\/:*?\"<>|]', '_', tmp_file_name)
这也解决了您原来的问题,即数组第一个元素 '\'
中的反斜杠正在转义结束引号并将其转换为 '
文字而不是关闭反斜杠周围的引号。
如果你愿意导入模块,这可以不用循环来完成,使用 re.sub
:
import re
file_name = "this/is:a*very?bad\example>of<a|filename"
res = re.sub("[\\/:*?\"<>|]", "_", file_name)
print(res)
# this_is_a_very_bad_example_of_a_filename
注意 \
反斜杠需要三倍甚至四倍,具体取决于确切位置。阅读 re
.