python 只将最后的输出写入文件

python only writes last output to file

我正在尝试编写一个程序,它会随机选择一个音阶,直到所有音阶都被选中,而我遇到的问题是我的代码只向我的文本文件写入一行。

我知道这是一个与 Python: Only writes last line of output 类似的问题,但我已经尝试过在循环外打开然后关闭文件的解决方案(至少尽我所能,请纠正我,如果我错了)。

我的代码是这样的:

#imports the required library
import random    

#picks 1 hands separate major scale
def MajorScalesHandsSeparate():

    #initialises the chars variable
    chars = 0

    #creates the checker file if it has not previously been created
    while True:
        with open('MajorScalesHandsSeparate.txt', 'a') as f:  
            break

    #counts the number of chars in the file
    with open('MajorScalesHandsSeparate.txt', 'r') as f:  
        for line in f:
            chars += len(line)

    #converts file to list
    with open('MajorScalesHandsSeparate.csv', 'r') as f:
        MajorScalesHandsSeparate = [line.strip() for line in f]  

    #opens file to check for the number of lines
    with open('MajorScalesHandsSeparate.csv', 'r') as f:  
        Items = sum(1 for _ in f)

    #asks the user how many scales they would like
    NumScales = input("How many hands separate major scales would you like? ")  

    #resets the loop counter and picker to 0
    WhileControl = 0
    ScalePicker = 0

    '''HERE IS WHERE I BELIEVE I FOLLOWED THE LINKED QUESTION'''
    checker = open('MajorScalesHandsSeparate.txt', 'w+')
    #choses a number
    while WhileControl != NumScales:
        ScalePicker = random.randint(0, Items-1)  

        #checks if scale has already been chosen
        if MajorScalesHandsSeparate[ScalePicker] not in open('MajorScalesHandsSeparate.txt').read():  

            #writes scale to file  
            Scale=str(MajorScalesHandsSeparate[ScalePicker])
            checker.seek(chars)
            checker.write(Scale + '\n')

            #prints chosen scale
            print MajorScalesHandsSeparate[ScalePicker]

            #increments the loop counter by one
            WhileControl = WhileControl + 1

            #removes item from list    
            else:
                MajorScalesHandsSeparate.remove(MajorScalesHandsSeparate[ScalePicker])
                Items = Items - 1

        #checks if all scales have been used
        if len(MajorScalesHandsSeparate) == 0:  
            with open('MajorScalesHandsSeparate.csv', 'r') as f:
                #converts file to list once again
                MajorScalesHandsSeparate = [line.strip() for line in f]  

    #closes the file
    checker.close()

#calls the function
MajorScalesHandsSeparate()

我的输出如下所示:

How many hands separate major scales would you like? 3
Db major RH only
F# major LH only
F# major RH only
>>> 

但文本文件显示为:

F# major RH only

我希望它看起来像这样:

Db major RH only
F# major LH only
F# major RH only

代码在输出文件中的同一位置写入和覆盖。这是由于:

checker.seek(chars)
checker.write(Scale + '\n')

chars 设置一次,永不更新