为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕无忌1623718 2023-07-18 15:01:14
我有一个包含姓名和职位描述列表的文本文件,例如:Jim SalesmanDwight SalesmanPam ReceptionistMichael ManagerOscar 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())在此先感谢您的帮助。
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

这是因为列表理解

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

将指针设置为文件末尾,因此没有任何内容可打印。如果再次打开文件并打印,它将打印所有内容。

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

你当然可以并且会起作用。您还可以将file_name.seek(0)指针移回起始位置,以便再次打印整个文件。


查看完整回答
反对 回复 2023-07-18
?
浮云间

TA贡献1829条经验 获得超4个赞

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声明。然后您就不需要手动关闭它等等。


查看完整回答
反对 回复 2023-07-18
  • 2 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信