【问题标题】:python : how to cast or convert string in a variable into rawpython:如何将变量中的字符串转换或转换为原始字符串
【发布时间】:2018-01-23 07:05:45
【问题描述】:
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_inputobject.button。假设我有 2 个名为 AABB 的对象,并且我在 AA.text_input 中输入了一个表达式/脚本(object1 的文本输入) .现在从 BB (object2) 我想使用在 AA.text_input 中输入的表达式并使用 exec() 执行它。所以在BB.button中我会写一个代码,例如:exec(AA.text_input)。所以我从 AA 获取的数据将是一个字符串。问题是 AA 文本输入中的代码类型可能包含任何字符,包括转义字符和其他字符。因此,当我在 BB 中使用 exec() 时,我会因为这些字符而出错。所以问题是:如何将该字符串从 BB.text_input 正确带到 AA?

【问题讨论】:

  • 你想要解决的真正问题是什么?
  • 原始字符串有助于解释器从可键入的内容中获取适当的字节。如果字节已经存在,那么就没有多少理由了。那么:哪一种格式来自另一端,你期望什么?
  • 我已经更新了我上面的问题,请看看。非常感谢
  • 您输入的\n 与真正的换行符没有区别。

标签: python string type-conversion rawstring


【解决方案1】:

据我了解,一旦声明了“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('\'', '\\\'')

【讨论】:

  • 谢谢,这就是我的想法,可以处理像 \n 或 \t 等转义字符,但我无法处理 ' 或 " ,例如 x="print ' test \'fail\' ' " 正如你所说的,一旦声明了 'x',' 和 \' 字符就会丢失内存,所以在我的示例中,' 和 \' 将存储为相同的 ' . 当我尝试重新加载它时,现在字符串变为:print 'test 'fail' ' 。我丢失了 ** 。如果我使用 x.replace,它将替换所有的 ' 。顺便说一句,像 \n \t 等转义字符几乎可以使用 x.encode('string_escape') 来解决,但我需要处理单 qout 和双引号问题。
  • 我测试了上面的示例,它似乎可以替换'"。您是否为那些添加了三重反斜杠?它们需要 3,因为它们不是像 'n' 和 't' 那样孤立地识别的字符。当我在 x="print 'test \'fail\' ' " 上尝试时,print x 输出 print \'test \'fail\' \'
  • 我需要这样的输出:print 'test \'fail\' ' 或者我希望能够执行 exec(x) 并获得最终输出比如:测试“失败”。所以更像是我想将一段 python 命令保存在一个变量中,然后我可以稍后使用 exec() 执行它。
猜你喜欢
  • 2016-11-29
  • 2011-05-23
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
相关资源
最近更新 更多