我认为很多人不会有这样的问题,但仍然如此。
所以,我有一个读取文件的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
在这种情况下可以做些什么?
答案 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))