为什么 open() 返回一个空变量?

我有一个包含姓名和职位描述列表的文本文件,例如:


Jim Salesman

Dwight Salesman

Pam Receptionist

Michael Manager

Oscar Accountant

我想将“推销员”人员的姓名和工作添加到列表中。但同时,我也想打印出完整的姓名列表和职位描述。我为 Python 编写了以下代码:


employee_file = open("employees.txt", "r")

matching = [sales for sales in employee_file if "Salesman" in sales]

print (matching)


print (employee_file.read())


employee_file.close()

我得到的结果是:


['Jim Salesman\n', 'Dwight Salesman\n']



Process finished with exit code 0

但是,当我计算出第二行和第三行代码时,print(employee_file.read())将生成完整的姓名列表和职位描述。


有人可以解释为什么print (employee_file.read())当第二行和第三行代码保留时是空白吗?我怀疑这是因为employee_file是一个空变量。但我不明白为什么会这样。


在执行打印功能之前,我是否需要定义一个新变量employee_file2并重新打开“employees.txt”文件,例如:


employee_file2 = open("employees.txt", "r")

print (employee_file2.read())

在此先感谢您的帮助。


慕无忌1623718
浏览 110回答 2
2回答

白衣染霜花

这是因为列表理解matching = [sales for sales in employee_file if "Salesman" in sales]将指针设置为文件末尾,因此没有任何内容可打印。如果再次打开文件并打印,它将打印所有内容。在执行打印功能之前,我是否需要定义一个新变量employee_file2并重新打开“employees.txt”文件你当然可以并且会起作用。您还可以将file_name.seek(0)指针移回起始位置,以便再次打印整个文件。

浮云间

Python 使用指针来跟踪它在文件中的位置。当您迭代文件的所有行时,就像在列表理解中一样,指针将指向文件的末尾。然后,根据文档:如果已到达文件末尾, f.read() 将返回空字符串 ( '')。>>> f.read()'This is the entire file.\n'>>> f.read()''相反,从文件中获取所有数据作为列表,然后对其进行处理,而不是再次接触该文件。with open("employees.txt") as f:    employees = f.read().splitlines()salespeople = [e for e in employees if "Salesman" in e]print(salespeople)# -> ['Jim Salesman', 'Dwight Salesman']print(employees)# -> ['Jim Salesman', 'Dwight Salesman', 'Pam Receptionist', 'Michael Manager', 'Oscar Accountant']顺便说一句,最好的做法是使用with声明。然后您就不需要手动关闭它等等。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python