python:如何将变量中的字符串转换或转换为raw

时间:2017-08-15 11:00:52

标签: python string type-conversion rawstring

x='''
print '\tone \'piece\' of \"metal\" with \\sharp\\ edge '
print '\nthanks'
'''
exec(x)

我有一个字符串变量(x),我想使用exec()正确打印出来。如果我有权访问变量,我可以直接使用r'并解决问题,例如:

x=r'''
print '\tone \'piece\' of \"metal\" with \\sharp\\ edge '
print '\nthanks'
'''
exec(x)

但在这种情况下,我无法访问变量。所以字符串变量来自其他目的或其他用户。那么如何将这个r'应用于现有变量,以便我可以使用exec()。

正确的输出应该是:

    one 'piece' of "metal" with \sharp\ edge 

thanks

真实案例是:

在我的软件中,我可以创建对象,每个对象都可以具有文本输入和按钮等属性。我将此文本输入和按钮属性称为 object.text_input object.button 。假设我有2个名为 AA BB 的对象,我在 AA.text_input 中输入表达式/脚本(object1的文本输入) 。现在从BB(object2)我想使用在 AA.text_input 中输入的表达式,并使用 exec()执行它。所以在 BB.button 中,我会写一个代码,例如: exec(AA.text_input)。因此我从AA获取的数据将是一个字符串。问题是AA的文本输入中的代码类型可能包含任何字符,包括转义字符和其他字符。因此,当我在BB中使用exec()时,由于这些字符,我将会出错。所以问题是:如何将BB.text_input中的字符串正确地带到AA?

1 个答案:

答案 0 :(得分:0)

据我了解,一旦声明'x',就会丢失输入字符的所有内存,例如:它用换行符替换'\ n'。

我能想到恢复这个的唯一方法就是写一个语句来用x替换原始字符中的所有字符。

例如:

for char in x:
    if char == '\n':
         #replace with '\\n'

编辑:对于此示例,一种方法是

x = x.replace('\\', '\\\\')
x = x.replace('\n', '\\n')
x = x.replace('\t', '\\t')
x = x.replace('\"', '\\\"')
x = x.replace('\'', '\\\'')