我使用Maya来渲染我的漫画,当我使用python编程时遇到了问题。 Maya给了我一个字符串变量,它是一个路径,我想将它转换为规范化路径。然而,当涉及'\ b'时,我完全没有玩它。这是问题所在:
我想将路径中的字符串转换为'D:/ notebook \ bot':'D / notebook / bot':
paths = ['D:\notebook\bot', 'D:\newworld']
for p in paths:
p = '{0!r}'.format(p).replace('\\', '/').replace(':','')
print p
输出结果为:
D/notebook/x08ot
D/newworld
请参阅\ n正确打印为/ n,但是\ b正在转义为/ x08。 我怎样才能实现我的目标?注意我不能将输入路径格式化为:
paths = [r'D:\notebook\bot', r'D:\newworld']
因为它是从Maya传来的。 Python版本是2.6。
答案 0 :(得分:1)
我想出的答案是使用re模块并使所有字符串成为“原始”字符串。有关原始字符串的更多信息,请查看http://docs.python.org/reference/lexical_analysis.html
import re
paths = [r'D:\notebook\bot', r'D:\newworld']
for p in paths:
result = re.sub(r':?\\', "/", p)
print(result)
答案 1 :(得分:0)
如果您的MAYA文件是.MA(Maya Ascii),您可以在文本编辑器中打开它们并手动搜索和替换路径。
或者,使用Maya之外的perl以编程方式执行:
perl -pi -e 's/\Qold-path\E/\Qnew-path\E/g' Your.MA
答案 2 :(得分:0)
我的解决方法将str转换为原始字符串(将字符串中的控制字符转换为原始转义序列表示)。使用'\ a',\ b','\ f','\ n','\ r','\ t','\ v'。所有转义序列的列表是here。
def str_to_raw(s):
raw_map = {8:r'\b', 7:r'\a', 12:r'\f', 10:r'\n', 13:r'\r', 9:r'\t', 11:r'\v'}
return r''.join(i if ord(i) > 32 else raw_map.get(ord(i), i) for i in s)
演示:
>>> file_path = "C:\Users\b_zz\Desktop\fy_file"
>>> file_path
'C:\\Users\x08_zz\\Desktop\x0cy_file'
>>> str_to_raw(file_path)
'C:\\Users\\b_zz\\Desktop\\fy_file'