我有一个值path = V:PRODUCTIONSSC_02SHOT_310compRendermainv0032560x1440_exrSC_02_SHOT_310_Compositing_main_v003.1001.exr
,我需要用普通斜杠替换反斜杠。
使用.replace("\",'/')
或normpath
可以让我:V:/PRODUCTIONS/SC_02/SHOT_310/compRender/main003�0x1440_exr/SC_02_SHOT_310_Compositing_main_v003.1001.exr
替换"\v"并侥幸逃脱,但是"\256"给了我特殊字符,我无法搜索"\256",因为字符串中的值会根据文件而变化。
此外,我无法像path=r"V:PRODUCTIONSSC_02SHOT_310compRendermainv0032560x1440_exrSC_02_SHOT_310_Compositing_main_v003.1001.exr"
一样在字符串前面使用"r",因为我没有创建路径值,因此它会转发给我。
由于您从另一个不可修改的源接收到变量,因此该字符串已被转义。
现在,对于您的字符串,有两个地方会误解字符:v
和 256
.
>>> path = 'V:PRODUCTIONSSC_02SHOT_310compRendermainv0032560x1440_exrSC_02_SHOT_310_Compositing_main_v003.1001.exr'
>>> path
'V:\PRODUCTIONS\SC_02\SHOT_310\compRender\mainx0b003®0x1440_exr\SC_02_SHOT_310_Compositing_main_v003.1001.exr'
# ----------------------------------------------^-----^
好消息是,原始字符串是语法的一部分,而不是字符串的一部分。问题在于python解释字符串的方式。您可以做的一件事是查找这些有问题的符号并替换它们。以下是此配方的修改版本,可处理大多数用例:
def raw(text):
escape_dict={'a':r'a',
'b':r'b',
'c':r'c',
'f':r'f',
'n':r'n',
'r':r'r',
't':r't',
'v':r'v',
''':r''',
'"':r'"',
' ':r' ',
'1':r'1',
'2':r'2',
'3':r'3',
'4':r'4',
'5':r'5',
'6':r'6',
'7':r'7',
'8':r'8',
'9':r'9',
'256': r'256'} # notice this line is the first 3 digits of the resolution
for k in escape_dict:
if text.find(k) > -1:
text = text.replace(k, escape_dict[k])
return text
此函数会将任何被误解的特殊符号替换为其原始等效符号。
如果调用前面定义的,则会得到:
>>> raw(path)
'V:\PRODUCTIONS\SC_02\SHOT_310\compRender\main\v003\2560x1440_exr\SC_02_SHOT_310_Compositing_main_v003.1001.exr'
您必须根据需要手动添加更多分辨率值。