python只将最后一个输出写入文件

时间:2016-08-29 17:54:01

标签: python list file append seek

我正在尝试编写一个程序,选择一个随机音阶,直到所有选择,我遇到的问题是我的代码只写了一行到我的文本文件。

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

我的代码是:

#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

1 个答案:

答案 0 :(得分:1)

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

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

chars设置一次,永不更新