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
设置一次,永不更新
我正在尝试编写一个程序,它会随机选择一个音阶,直到所有音阶都被选中,而我遇到的问题是我的代码只向我的文本文件写入一行。
我知道这是一个与 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
设置一次,永不更新