如何将python字符串(包括'\ b')转换为原始字符串?

时间:2012-02-09 05:20:49

标签: python

我使用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。

3 个答案:

答案 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'