让我快速介绍一下这个场景。对于基于知识的工程课程,我将使用ParaPy(基于python的KBE软件)创建公务机。用户应该能够更改输入文件中的变量,输入文件中要包括单位和注释。然后,程序将创建一个几何图形并在GUI中打开它,用户能够在GUI中交互式地更改所述变量。用户应该能够将当前值保存到与输入文件格式完全相同的输出文件中,以便包括单位和注释。我很抱歉,如果没有 ParaPy 软件,这个问题是无法重现的,但我发现如果不使用整个场景,就很难描述。
我认为为此使用 CSV 是合适的。阅读部分工作正常,但我在写作部分遇到了麻烦。该案例的简化版本具有以下代码。这将根据宽度、高度和长度变量创建框几何图形。这些是可以在 GUI 中编辑的变量,我需要再次保存。但是,我不知道如何在不对其进行硬编码的情况下访问它们。我试图使用输入文件读取变量名称,然后使用该名称请求值(参见def save_vars(self):中的雄蕊)。
from parapy.core import *
from parapy.geom import *
from csv_in_out import *
class Boxy(Base):
# Read function from external file
read = ReadInput(file_name='box.csv')
# Create dict
variables = read.read_input
# Set the editable variables
width = Input(variables["width"])
height = Input(variables["height"])
length = Input(variables["length"])
@Part
# Create the geometry
def box1(self):
return Box(width=self.width,
height=self.height,
length=self.length)
@Attribute
def save_vars(self):
path = self.read.generate_path
first_row = True
with open(path[0], 'rb') as file: # Open file
reader = csv.reader(file, delimiter=',', quotechar='|') # Read into reader and section rows and columns
with open(path[1], 'wb') as outfile:
filewriter = csv.writer(outfile, delimiter=',', quotechar='|')
for row in reader:
if first_row == True:
filewriter.writerow(row)
first_row = False
else:
# Find the name of the variable that we want to request and save
var_name = row[0]
value = self.var_name # I know this does not work, but I basically want to get the input variables
# Update the value in row
row[1] = value
# Write the row to a new file
filewriter.writerow(row)
return 'Saved'
if __name__ == '__main__':
from parapy.gui import display
obj = Boxy()
display(obj)
下面是我用于此目的的csv文件。
var_name,Value,Unit,Comment
width,2,[m],Width of the box
height,3,[m],Height of the box
length,4,[m],Length of the box
感谢您抽出宝贵时间查看我的问题。如果有任何不清楚的地方或您需要更多信息,请告诉我。
正如 stovfl 指出的那样,有一个很好的类可以在 Python 中编写配置文件,如果您仍然从头开始,这绝对是解决它的最佳方法。
但是,我也找到了如何让我的东西工作的方法。我有以下内容:
else 语句中的行:
value = self.var_name
应改为
value = getattr(self,var_name)