如何将包含 '\b' 的 Python 字符串转换为原始字符串?
我在用Maya制作我的卡通动画时,遇到了一个用Python编程的问题。Maya给了我一个字符串变量,这个变量是一个路径,我想把它转换成一个标准的路径。但是,当遇到'\b'时,我完全搞不定。问题是这样的:
我想把paths中的字符串,比如'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。
3 个回答
0
我找到了一种解决方法,可以把普通字符串转换成原始字符串(也就是把字符串中的控制字符变回它们原来的转义序列)。这个方法可以处理像 '\a'、'\b'、'\f'、'\n'、'\r'、'\t'、'\v' 这些字符。所有转义序列的列表可以在这里查看。
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'
0
如果你的MAYA文件是 .MA 格式(也就是Maya的ASCII文件),你可以用文本编辑器打开它,然后手动查找和替换路径。
或者,你也可以在Maya外面用perl编程来自动处理这个问题:
perl -pi -e 's/\Qold-path\E/\Qnew-path\E/g' Your.MA
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)