簡體   English   中英

Python文件處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM