2 回答
TA贡献1796条经验 获得超10个赞
这是因为列表理解
matching = [sales for sales in employee_file if "Salesman" in sales]
将指针设置为文件末尾,因此没有任何内容可打印。如果再次打开文件并打印,它将打印所有内容。
在执行打印功能之前,我是否需要定义一个新变量
employee_file2
并重新打开“employees.txt”文件
你当然可以并且会起作用。您还可以将file_name.seek(0)
指针移回起始位置,以便再次打印整个文件。
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声明。然后您就不需要手动关闭它等等。
添加回答
举报