亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 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 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號