Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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 如何使用文件中的文本作为变量名?_Python_Class_Variables_Xlrd_Xlutils - Fatal编程技术网

Python 如何使用文件中的文本作为变量名?

Python 如何使用文件中的文本作为变量名?,python,class,variables,xlrd,xlutils,Python,Class,Variables,Xlrd,Xlutils,如何使用文件中的文本作为变量名? 我正在从excel文件中提取值。 我在Python3中使用xlrd和xlutils class employee(object): def __init__(self, name): self.name = name emp_list.append(name) def bulk_hours(self,sunday=0,monday=0,tuesday=0,wednesday=0,thursday=0,friday=0,saturday=0):

如何使用文件中的文本作为变量名? 我正在从excel文件中提取值。 我在Python3中使用xlrd和xlutils

class employee(object):
def __init__(self, name):
    self.name = name
    emp_list.append(name)
def bulk_hours(self,sunday=0,monday=0,tuesday=0,wednesday=0,thursday=0,friday=0,saturday=0):
    self.sunday = sunday
    self.monday = monday
    self.tuesday = tuesday
    self.wednesday = wednesday
    self.thursday = thursday
    self.friday = friday
    self.saturday = saturday
我正在从电子表格中提取员工。 我试着用他们的真名。 我很想知道任何可行的解决方案。 谢谢

编辑:请原谅我对编程的无知和我糟糕的帖子。 我正在尝试制作一个简单的程序,允许我从Excel加载员工姓名和工作日程。 我还将确保所有编辑都保存回电子表格。 员工们被贴上了他们名字的标签。我正在尝试将其名称作为变量加载,以便执行以下操作:

John = employee('John')
John.bulk_hours(0,8,8,8,8,8,0)
Stacy = employee('Stacy')
print(John.monday)
我的目标是使用他们的名字作为变量,我可以使用点符号。 这是否可行?他们有没有其他的方法让我来处理这件事

def load(row):
employee2 = employee(s.cell(row, 0).value)
employee2.bulk_hours(s.cell(row, 1).value, s.cell(row, 2).value, s.cell(row, 3).value, s.cell(row, 4).value,
                     s.cell(row, 5).value, s.cell(row, 6).value, s.cell(row, 7).value)
print(employee2.saturday)
我正在尝试使用这样的函数来加载多个员工及其工作时间

我可以用这样的清单吗

worker = ['Joe']
worker[0] = employee('Joe')
worker[0].bulk_hours(0,8,8,8,8,8,0)
print(worker[0].monday)
感谢您的宝贵时间。

覆盖以透明方式访问内部词典

class employee(object):
    def __init__(self, ...):
        self._internal_d = extract_data()  # replace extract_data with however you extract CSV values to a dictionary
        ...  # perform other initialization

    def __getattr__(self, name):
        try:
            return self._internal_d[name]
        except KeyError:
            raise AttributeError()
或者,您可以实现以允许写入属性

    def __setattr__(self, name, value):
        return self._internal_d[name] = value

解释:当python执行变量赋值并且“正常”找不到变量名时,它会检查对象是否具有
\uuu getattr\uuu
。如果是,则调用
\uuuu getattr\uuuu
以获取具有指定名称的值。因此,可以使用动态变量名。同样,对于
\uuuu setattr\uuuu

而言,您不希望使用来自电子表格的变量名。 或者一个:变量名是运行程序的内部名称,不能再次导出到输出文件

当程序运行时,将变量bamed
John
表示John的数据是毫无意义的。例如,我们假设可以创建一个特殊的标记来使用变量名,比如说一个
前缀来从另一个变量获取名称。您的示例如下:

def row_data(emp_name, *args):
    ?emp_name = employee(emp_name)
    ?emp_name.bulk_hours(*args)
    print(?emp_name.monday)
因此,即使在运行时
?emp_name
将由变量
name
的内容进行交换,yur程序在读取代码的人看来仍然是一样的。因此,简单地将变量命名为
person
employee
或其他任何名称更有意义,因为它可以表示任何员工(事实上,当您在电子表格内容中循环时,变量通常一次只携带一个人的数据)

也就是说,有时我们确实希望程序中的数据具有编程标签。但在这些情况下——这就是字典的用途——创建一个
employees
dict,并填充它——然后您可以将名称作为键:

employees = dict()
def row_data(emp_name, name):
    person = employee(emp_name)
    person.bulk_hours(*args)
    employes[emp_name] = person

def print_employeers():
    for person_name, person_data in employees.items():
         print(person_name, person_data)
如您所见,可以打印所有员工的数据,而无需键入他们的姓名。此外,如果它是一个交互式程序,则可以使用它作为字典键来查找与用户输入的名称相关的数据

但是,如果您打算让一个程序自己生成其他Python源文件,并最终为每个员工生成一个
.py
文件。在这种情况下,只需使用一个模板引擎,比如Jinja2,或者只需使用str的
format
方法。(仍然很难想象你为什么需要这样的东西)

为了得到完整的答案,可以在Python中创建动态变量名。但是,您将处于与我在第一个示例中描述的完全相同的情况

任何正在运行的代码的全局变量都保存在一个常规Python字典中,该字典通过调用
globals()
函数返回。类似地,局部变量的值保存在通过调用
locals()
返回的字典中,尽管对于编译时已知的变量,这些值的表现并不好(在这种情况下,局部变量缓存在frame对象中,局部变量dict仅在读取时与它们同步,但不能通过局部变量写入)

因此:


将按您要求的那样工作-但很容易看出它是无用的。

您可以显示示例文本文件以及您想要的输出或您正在尝试执行的操作吗?您没有;您提出了错误的问题。请告诉我们您正在尝试执行的操作;正确的解决方案可能涉及字典而不是动态变量名。@NinjaGaiden我想能够提取一个员工的名字,比如“John”,然后做John=employee(“John”)。你知道,你可以将XLS文件转换为CSV。也许你可以给我们看一段CSV文件?对我来说这听起来像是一个问题。我正试图为我的聊天机器人赢得声誉,这样它就可以聊天了,下面是它帐户下的答案。
def row_data(emp_name, *args):
    globals()[emp_name] = employee(emp_name)
    globals()[emp_name].bulk_hours(*args)
    print(globals()[emp_name].monday)