Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SymPy和#x27;s Sympify函数返回字符串,而不是SymPy对象_Python_Excel_Sympy_Openpyxl - Fatal编程技术网

Python SymPy和#x27;s Sympify函数返回字符串,而不是SymPy对象

Python SymPy和#x27;s Sympify函数返回字符串,而不是SymPy对象,python,excel,sympy,openpyxl,Python,Excel,Sympy,Openpyxl,我有一个Excel文件,有两列;第一个包含我的变量名,第二个包含键入为字符串的数学表达式。我使用Python2.7.12和OpenPyxl2.3.2导入这些数据。默认情况下,字符串作为unicode导入 我想从导入的字符串创建一个Symphy对象,以便对其执行一些操作。但是,在本例中,对导入的字符串进行sympify将返回一个字符串对象,而不是SymPy对象。为什么会这样 如果我改为将字符串硬编码到.py文件中,我将获得预期的行为(sympify返回SymPy对象) 该代码说明: from sy

我有一个Excel文件,有两列;第一个包含我的变量名,第二个包含键入为字符串的数学表达式。我使用Python2.7.12和OpenPyxl2.3.2导入这些数据。默认情况下,字符串作为unicode导入

我想从导入的字符串创建一个Symphy对象,以便对其执行一些操作。但是,在本例中,对导入的字符串进行sympify将返回一个字符串对象,而不是SymPy对象。为什么会这样

如果我改为将字符串硬编码到.py文件中,我将获得预期的行为(sympify返回SymPy对象)

该代码说明:

from sympy import *
import openpyxl

imported_data = openpyxl.load_workbook('sample_workbook.xlsx')
data = imported_data.get_sheet_by_name('sheet1')

variable_name = data['A1'].value
variable_value = data['B1'].value
globals()[variable_name] = variable_value

x = symbols('x')

print(type(variable1))      # This is a unicode string
sympy_expr = sympify(variable1)
print(type(sympy_expr))     # This should now be a SymPy object, but it's now of type str


globals的奇怪用法是什么?只需使用变量_值。不管怎样,看起来你的问题是这个方程是一个带引号的字符串。从中删除引号转换工作正常。删除引号确实会导致sympify转换为SymPy对象-谢谢。我使用globals()在导入多个变量时分配它们。在我的全部问题中,我不是从工作簿中导入一个变量,而是导入许多变量。我想将每个变量(来自工作簿第1列)分配给它的值(来自工作簿第2列)。然后,我希望能够仅使用该变量的名称来调用该变量,并避免每次需要时都需要使用dictionary[key]的繁琐语法来调用相应的值。dictionary语法并不特别复杂,但不管怎样。您确实应该使用某种容器对象来避免填充
全局对象时可能产生的任何副作用。不幸的是,当它嵌入到一些长数学表达式中时,会增加不必要的复杂性。我将研究其他容器选项。再次感谢。globals的奇怪用法是什么?只需使用变量_值。不管怎样,看起来你的问题是这个方程是一个带引号的字符串。从中删除引号转换工作正常。删除引号确实会导致sympify转换为SymPy对象-谢谢。我使用globals()在导入多个变量时分配它们。在我的全部问题中,我不是从工作簿中导入一个变量,而是导入许多变量。我想将每个变量(来自工作簿第1列)分配给它的值(来自工作簿第2列)。然后,我希望能够仅使用该变量的名称来调用该变量,并避免每次需要时都需要使用dictionary[key]的繁琐语法来调用相应的值。dictionary语法并不特别复杂,但不管怎样。您确实应该使用某种容器对象来避免填充
全局对象时可能产生的任何副作用。不幸的是,当它嵌入到一些长数学表达式中时,会增加不必要的复杂性。我将研究其他容器选项。再次感谢。