【问题标题】:How to convert string into an variable in python如何在python中将字符串转换为变量
【发布时间】:2013-11-07 20:51:32
【问题描述】:

我正在尝试从文本文件中读取字符串。读完后,我想将其转换为数组或变量。在文本文件中,我可以读取“b”,我将“b”签名为 x,x='b',并且我想使用如何将'b' 作为变量b,以便s = sin(2*pi*x)s = sin(2*pi*b)

对象: 我正在尝试设置一个配置文件,以便我可以轻松更改文本文件中的输入变量。

最后一步是我可以打印出来。

b = arange(0.0, 4.0, 0.01)
t = arange(0.0, 2.0, 0.01)
x = ['b'] // result after I read from the file
x = changestringtoVarible('b')

s = sin(2*pi*x)
plot(x, s)
xlabel('time(s)')
ylabel(y)
title(ttl)
grid(True)

我想从文本文件中选择是使用b 还是t 作为xaxis,这就是我问这个的原因。

【问题讨论】:

  • 发布您的文件样本
  • @void 我已经更新了。

标签: python string variables io


【解决方案1】:

您正在执行一种原始形式的解析。您的变量 x 将包含字符“b”或“t”,并且您希望使用它来控制表达式的评估方式。您不能直接在表达式中使用变量 x,因为它只包含一个字符。您必须根据其值执行不同的代码。对于像这样的简单案例,您可以使用 if 构造:

...
b = arange(0.0, 4.0, 0.01)
t = arange(0.0, 2.0, 0.01)

if x == 'b':
    xvalue = b
elif x == 't'
    xvalue = t

s = sin(2*pi*xvalue)
plot(xvalue, s)
...

对于更多的情况,您可以使用字典:

...
xvalues = { 'b' : arange(0.0, 4.0, 0.01),
            't' : arange(0.0, 2.0, 0.01),
            # More values here
          }

xvalue = xvalues[x]
s = sin(2*pi*xvalue)
plot(xvalue, s)
....

【讨论】:

  • 好吧我就这么解释一下,如果有这么多变量可以选择,用if else语句就没有意义了。因为我正在尝试设置一个配置文件,以便我可以轻松更改文本文件中的输入变量。
  • 我正在做一个大项目,如果变量存储在其他文件中,我不能这样做,比如 2000 个变量。
  • 对于这么大的数字,@Farhadix 的答案更好。
  • 感谢您的努力,我也提出了您的解决方案!
【解决方案2】:

你可以使用 eval。

例如:

b='4'
formula = "2*x"
formula = formula.replace("x", "%d")
Result = eval(formula % int(b))

【讨论】:

  • 请看我上面的评论...我没听懂。
  • 我认为你可以使用 ConfigParser
  • 谷歌它。 ConfigParser 比您想象的要容易。您在其中有部分和变量。访问它们就像定义变量一样简单。
  • 你能给我一个链接,这样我就可以得到一个好的跟随:)
  • 嘿伙计!我用你和@crs thx u 的组合找出答案
【解决方案3】:

如果你只想使用字符串作为变量,你可以使用 pythons exec 函数:

>>> exec("some_string"+"=1234")
>>> some_string
1234

更新:

您最好为s = sin(2*pi*x) 中的x 变量使用另一个名称,从现在开始我们可能会调用x y

b = arange(0.0, 4.0, 0.01)
t = arange(0.0, 2.0, 0.01)

假设x定义了应该使用哪一个,你可以使用下面的代码将它赋值给一个变量:

exec("y"+"="+x)
s = sin(2*pi*y)

那个应该可以的。但我建议您将代码更改为更可靠的代码(例如使用字典)。

【讨论】:

  • 因为我正在尝试设置一个配置文件,以便我可以轻松更改文本文件中的输入变量。我想做 x = b,并将其用作输入。你能在我的代码上试试吗?我试过了,还是不行……
  • 请写完整的句子。否则没人知道你想告诉我们什么。
  • 如果我执行 exec("y"+"="+"b") 它工作得很好,但我必须执行 exec("y"+"="+x) 它没有工作。如果我执行 exec("y"+"="+'x') 它将返回 y = 'b' 而不是 y=b。
  • 嘿,谢谢!我先建立了一个ConfigParser文件并配置它,输入的是一个字符串而不是字符串列表,现在我用你的策略来解决它。
猜你喜欢
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多