2017-03-06 41 views
0
class Employee: 
    def __init__(self, name, idno, leavetaken, leavereqd, reason): 
     self.name = name 
     self.idno = idno 
     self.leavetaken = leavetaken 
     self.leavereqd = leavereqd 
     self.reason = reason 

    def __str__(self): 
     return "Name: {}\nID No:{}\nLeave Taken: {}\nLeave Requested: {}\nLeave Reason: {}\n".format(self.name, self.idno, self.leavetaken, self.leavereqd, self.reason) 

n = int(raw_input("Please enter the number of employees: ")) 
employees = [] 

for i in range(n): 
    employee = Employee(
     raw_input("Employee name: "), 
     raw_input("Employee ID no: "), 
     raw_input("Employee leave taken: ") , 

    raw_input("Employee leave requested: ") , 
     raw_input("Employee leave reason: ") 
    ) 
    employees.append(employee) 

print("\n") 

for employee in employees: 
    print(employee) 

我无法保存输出哟csv文件。如果你能帮助我,这将是一个很大的帮助。错误书面类文件到csv

如果我尝试以下写入csv,我得到关键错误为零

keys = my_li[0].keys() 
with open('people.csv', 'wb') as output_file: 
    dict_writer = csv.DictWriter(output_file, keys) 
    dict_writer.writeheader() 
    dict_writer.writerows(my_li) 

我曾尝试另一种方式来写他们为CSV

keys = employee[0].keys() 
with open('peo.csv', 'wb') as output_file: 
    dict_writer = csv.DictWriter(output_file, keys) 
    dict_writer.writeheader() 
    dict_writer.writerows(employee) 

,我得到的错误是

AttributeError: Employee instance has no attribute 'getitem'

Listwriter功能不也是成功的。任何人都可以让我把解决方案写成csv吗?

+0

糟糕。在尝试缩进时,我给出了代码,并且它已经在我的代码中创建了>符号。 – anonymous

+0

最后一行不应该是dict_writer.writerows(employee [0])? – Kewl

+0

在keys = employee [0] .keys()中获取错误,该雇员实例没有属性getitem – anonymous

回答

1

这应该为你做。

columns = ['name', 'idno', 'leavetaken', 'leavereqd', 'reason'] 
with open('peo.csv', 'wb') as output_file: 
    dict_writer = csv.DictWriter(output_file, columns) 
    dict_writer.writeheader() 
    dict_writer.writerow({'name': employee.name, 'idno': employee.idno, ...}) 

迭代列表中的所有员工。

+0

python输出显示了2名员工的详细信息,当我给n = 2但csv只显示最后一个。我哪里出错了? – anonymous

+0

这个实现使用了'writerow',它编写了一个单行的对象(一个字典)。所以每次打开文件时都会写入该行。你可以使用'writerows([dictionaries])'来代替所有员工。 – nir0s

+0

我在编写代码时尝试写字典时出现错误。你能解释一下吗? – anonymous