2015-04-18 96 views
1

我的程序看起來像這樣。我必須通過執行temp.txt文件刪除numbers.txt文件中的三個記錄,即「16」,「17」和「18」,並將「10」替換爲「50」。我很難過。如何從Python文件中刪除特定的記錄?

import os 
    import fileinput 


    def main(): 

    # Create a numbers.txt file and write the numbers 1 through 10 to it 
    number_file = open("numbers.txt", 'w') 
    for n in range(1, 11): 
     number_file.write(str(n) + '\n') 
     number_file.close() 

    # Read the data from the file and print the total of all the numbers 
    number_file = open("numbers.txt", 'r') 
    total = 0 
    line = number_file.readline() 
    while line != "": 
     amount = float(line) 
     print(amount) 
     total += amount 
     line = number_file.readline() 
    print(total) 
    number_file.close() 

    # Add the numbers 11 through 20 
    number_file = open("numbers.txt", 'a') 
    for n in range (11, 21): 
     number_file.write(str(n) + '\n') 
    number_file.close() 

    # Remove 16, 17, 18 and overwrite 10 with 50 
    temporary_file = open("temp.txt", 'w') 
    number_file = open("numbers.txt", 'r')  
    line = number_file.readline() 
    each_line = line.rstrip('\n') 
    while each_line != "" and each_line != "16" and each_line != "17" and each_line != "18": 
     temporary_file.write(line) 
     line = number_file.readline() 
    temporary_file.close() 
    number_file.close() 
    os.remove("numbers.txt") 
    os.rename("temp.txt", "numbers.txt") 

main() 
+0

你是什麼意思「記錄」?文本文件的格式是什麼? – BrenBarn

+0

它究竟包含什麼? –

+0

您正在添加一個元素後關閉文件。你沒有例外嗎? – Javier

回答

0

取而代之的是:

while each_line != "" and each_line != "16" and each_line != "17" and each_line != "18": 

這樣做:

if each_line not in ["16", "17", "18"]: 
    temporary_file.write(each_line + "\n") 

對於重寫10與50的一部分,你可以使用一個簡單的if語句來代替的each_line值:

if each_line == "10": 
    each_line = "50" 

但是,讓我們假裝你需要替換值的很多,你需要一個更靈活的解決方案:

replacements = {"10": "50"} 
# in the loop: 
each_line = replacements.get(each_line, each_line) 

get()第二個參數會導致價值被單獨留在家中,如果不是在字典。

+0

太棒了,謝謝你。我昨天能夠弄明白,但你的解決方案更簡單,我喜歡替換變量的可擴展性。 – Jasonca1

+0

我很樂意提供幫助。沒有說'謝謝'像upvote,順便說一句;) –

+0

試過。我剛開始使用堆棧溢出,我沒有足夠的聲望來upvote呢:( – Jasonca1

相關問題