转换字符串

时间:2016-03-21 10:26:51

标签: python python-2.7

我认为很多人不会有这样的问题,但仍然如此。

所以,我有一个读取文件的python程序,该文件有一些程序要执行的命令(我自己的语法)。
程序逐行读取文件到字符串 如果它从文件中读取的命令是:

'"Hello" + "World" + "!!!"'

我想将其转换为:

"Hello" + "World" + "!!!"

因此python可以将其读作:

'HelloWorld!!!'

尽管有很多尝试,但我无法这样做 帮助会被爱。

我尝试过的一件事是使用compile函数执行代码:

obj = compile('a = '"Hello" + "World" + "!!!"'', '<string>', 'exec')
exec(obj)
print a

但不是'HelloWorld!!!'而是打印"Hello" + "World" + "!!!",而是将其放入字符串中,然后返回'"Hello" + "World" + "!!!"'


注意: 该计划甚至可能遇到变数。例如:

a = 42
'"The number" + "is" + a'

预期产出:

The number is 42

在这种情况下可以做些什么?

3 个答案:

答案 0 :(得分:1)

您可以使用以下技巧:

m = '"Hello" + "World" + "!!!"'
print ''.join(m.replace('"', "").split(" + "))

输出:

HelloWorld!!!

首先替换",然后创建仅包含.split字样的列表,然后使用''.join()

从列表中生成字符串

答案 1 :(得分:0)

您可以使用shlex模块以使用类似shell的语法拆分字符串,然后使用str.join()方法中的列表解析来连接这些字:

>>> import shlex
>>> 
>>> ''.join([i for i in shlex.split(s) if i != '+'])
'HelloWorld!!!'

请注意,您只需对字符串使用eval()函数,但它根本不是一种安全的方法。除非您确定该字符串不包含危险命令。

答案 2 :(得分:0)

你的错误是把它放回一个字符串中。编译和评估已经取消了一个级别的引用,所以现在您需要重复该过程。您可以使用“eval”函数而不是编译分配,如下所示:

for line in open(your file....):
    print eval(eval(line))