[英]Python File Handling
我需要編寫一個程序來讀寫文件。 我有根據我調用函數的順序工作的代碼。
def FileSetup():
TextWrite = open('Leaderboard.txt','w')
TextWrite.write('''| Driver | Car | Team | Grid | Fastest Lap | Race Time | Points |
''')
TextWrite.close()
TextRead = open('Leaderboard.txt','r')
return TextRead
def SortLeaderboard(LeaderBoard):
TextFile = open('Leaderboard.txt', 'w')
for items in LeaderBoard:
TextFile.write('\n| '+items['Driver']+' | '+str(items['Car'])+' | '+items['Team']+' | '+str(items['Grid'])+' | '+items['Fastest Lap']+' | '+items['Race Time']+' | '+str(items['Points'])+' |')
Leaderboard = Setup()
FileSetup()
TextRead = FileSetup()
TextFile = open('Leaderboard.txt','w')
SortLeaderboard(Leaderboard)
#TextRead = FileSetup()
str = TextRead.read()
print str
取決於哪個TextRead = FileSetup(),我注釋掉SortLeaderboard或FileSetup都可以工作。 如果在調用SortLeaderboard之后將TextRead注釋掉,則SortLeaderboard將寫入文件,而FileSetup將不會。 如果我在之后調用它,則FileSetup將寫入文件,而Sortleaderboard不會。 問題是只有一個函數寫入文件。 我不能兩者都寫。
很抱歉,這確實讓我感到困惑,這是我想到的最好的解釋方式。 如果您需要我以其他方式解釋一些問題,請詢問,我會盡力的,
避免直接調用.open
和.close
,而改用上下文管理器 。 完成后,它們將處理關閉文件對象。
from contextlib import contextmanager
@contextmanager
def setup_file():
with open('Leaderboard.txt','w') as writefile:
myfile.write('''| Driver | Car | Team | Grid | Fastest Lap | Race Time | Points |
''')
with open('Leaderboard.txt','r') as myread:
yield myread
def SortLeaderboard(LeaderBoard):
with open('Leaderboard.txt', 'w') as myfile:
for items in LeaderBoard:
TextFile.write('\n| '+items['Driver']+' | '+str(items['Car'])+' | '+items['Team']+' | '+str(items['Grid'])+' | '+items['Fastest Lap']+' | '+items['Race Time']+' | '+str(items['Points'])+' |')
Leaderboard = Setup()
with setup_file() as TextRead:
SortLeaderboard(Leaderboard)
str = TextRead.read()
print str
在這里,您實例化了自己的上下文管理器setup_file
,其中封裝了准備使用該文件以及隨后進行清理的步驟。
上下文管理器是帶有yield語句的python生成器。 在yield語句之后,對流的控制從生成器傳遞到生成器主體。
生成器主體執行后,控制流將返回到生成器中,並可以執行清理工作。
默認情況下, open
可以充當上下文管理器,並負責關閉文件對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.