我有一个文本文件,列出了一组员工的名字和姓氏,他们的身份证号码,性别和经验年限。第一行包含员工人数。它叫做employees.txt。这是:
7
约翰
Doe的
33
272838
中号
玛丽
约翰逊
38
3849383
˚F
奥培
狗
6
839293
中号
大小姐
狗
4
238392
˚F
约翰
布拉
28
834282
中号
无肢
SPIEN
2
5789812
˚F
沙恩
CasenStien
2
567891
中号
我想将这些信息整理成一个词典列表,然后找到所有女性员工并打印出他们的名字和姓氏。我可以获得字典列表,但是当我试图找到并打印出女性员工的姓名时,我收到了一个错误。这是我的代码:
def employee_write(file):
employee_dict = {}
employee_dict["First"] = file.readline().strip()
employee_dict["Last"] = file.readline().strip()
employee_dict["Experience"] = file.readline().strip()
employee_dict["ID"] = file.readline().strip()
employee_dict["Gender"] = file.readline().strip()
return employee_dict
def female_print(x2):
for term in x2:
for word in employee_dict:
if employee_dict["Gender"] == "F":
print(employee_dict["First"])
print(employee_dict["Last"])
def main():
file = open("employees.txt", "r")
n = int(file.readline())
x1 = employee_write(file)
employee_list = []
for i in range(n):
employee_list.append(x1)
x2 = employee_list
print(x2)
female_print(x2)
main()
我的错误是什么? female_print()函数无效,因为它表示未定义名称“employee_dict”。有什么问题?
答案 0 :(得分:1)
我很难理解你的变量命名和用法,所以我简化了一点:
def employee_write(file):
employee_dict = {}
employee_dict["First"] = file.readline().strip()
employee_dict["Last"] = file.readline().strip()
employee_dict["Experience"] = file.readline().strip()
employee_dict["ID"] = file.readline().strip()
employee_dict["Gender"] = file.readline().strip()
return employee_dict
def female_print(employee_list):
for employee in employee_list:
if employee["Gender"] == "F":
print(employee["First"])
print(employee["Last"])
def main():
file = open("employees.txt", "r")
n = int(file.readline())
employee_list = []
for i in range(n):
employee_list.append(employee_write(file))
print(employee_list)
female_print(employee_list)
main()
产生
[{'Gender': 'M', 'Last': 'Doe', 'ID': '272838', 'Experience': '33', 'First': 'John'}, {'Gender': 'F', 'Last': 'Johnson', 'ID': '3849383', 'Experience': '38', 'First': 'Mary'}, {'Gender': 'M', 'Last': 'Dog', 'ID': '839293', 'Experience': '6', 'First': 'Opie'}, {'Gender': 'F', 'Last': 'Dog', 'ID': '238392', 'Experience': '4', 'First': 'Missy'}, {'Gender': 'M', 'Last': 'Bla', 'ID': '834282', 'Experience': '28', 'First': 'John'}, {'Gender': 'F', 'Last': 'Spien', 'ID': '5789812', 'Experience': '2', 'First': 'Amelia'}, {'Gender': 'M', 'Last': 'CasenStien', 'ID': '567891', 'Experience': '2', 'First': 'Shane'}]
Mary
Johnson
Missy
Dog
Amelia
Spin
这就是你想要的吗?
答案 1 :(得分:0)
这里有两个(主要)问题。首先,你实际上并没有阅读整个文件。您正在读取第一个记录(作为x1),然后将该记录追加到列表N次。你可以从印刷品中看到你只得到一张唱片。
此外,您的print_female函数引用了一个不存在的变量“employee_dict” - 您可能需要在某处定义它。也许你打算用“术语”?这会引发堆栈跟踪。
如果您解决了这两个问题,那么代码的基本前提是合理的。
答案 2 :(得分:0)
在main
中,函数employee_write
(可能应该称为employee_read
)仅称为一次。
尝试这样的事情:
In [1]: with open('employees.txt', 'r') as ef:
txt = ef.read()
...:
In [2]: lines = txt.split()
In [3]: records = [lines[i:i+5] for i in xrange(1, len(lines), 5)]
In [4]: records
Out[4]: [['John', 'Doe', '33', '272838', 'M'], ['Mary', 'Johnson', '38', '3849383', 'F'], ['Opie', 'Dog', '6', '839293', 'M'], ['Missy', 'Dog', '4', '238392', 'F'], ['John', 'Bla', '28', '834282', 'M'], ['Amelia', 'Spien', '2', '5789812', 'F'], ['Shane', 'CasenStien', '2', '567891', 'M']]
In []: for r in records:
print r
....:
['John', 'Doe', '33', '272838', 'M']
['Mary', 'Johnson', '38', '3849383', 'F']
['Opie', 'Dog', '6', '839293', 'M']
['Missy', 'Dog', '4', '238392', 'F']
['John', 'Bla', '28', '834282', 'M']
['Amelia', 'Spien', '2', '5789812', 'F']
['Shane', 'CasenStien', '2', '567891', 'M']
N.B。:此代码假设输入文件格式正确!