以下脚本无法将所有输出打印到文件(test.txt)中,我该如何解决? (它只打印了一个3-mer)。
import random
def amino(length):
return ''.join(random.choice('GPAVLIMCFYWHKRQNEDST') for i in range(length))
list_size = 8000
for j in range(list_size):
drd = int(random.normalvariate(3, 0))
f = open('gen.dat', 'w')
print amino(drd)
f.write(amino(drd))
f.close()
答案 0 :(得分:2)
当您使用'w'
模式打开文件时,实际上是在覆盖该文件(如果该文件已存在)。
您正在打开文件并在循环内关闭它,因此该文件只包含最后一个peptide(aminoacidDRG)
。您应该在循环外部打开文件,并使用with
语句来处理文件,这样with
语句可以在with
块结束后处理关闭文件。
示例 -
import random
def peptide(length):
return ''.join(random.choice('GPAVLIMCFYWHKRQNEDST') for i in range(length))
list_size = 8000
with open('gen.dat', 'w') as f:
for j in range(list_size):
aminoacidDRG = int(random.normalvariate(3, 0))
print peptide(aminoacidDRG)
f.write(peptide(aminoacidDRG))
答案 1 :(得分:0)
每次循环都会打开和关闭文件,只打开一次
f = open('gen.dat', 'w')
for j in range(list_size):
aminoacidDRG = int(random.normalvariate(3, 0))
print peptide(aminoacidDRG)
f.write(peptide(aminoacidDRG) + '\n')
f.close()
当您使用'w'
打开文件时,如果该文件已存在,则会覆盖该文件。您可以使用'a'
进行追加,但我建议上面的代码只打开文件一次并继续写入。您可以使用with
语句
with open('gen.dat', 'w') as f:
for j in range(list_size):
aminoacidDRG = int(random.normalvariate(3, 0))
print peptide(aminoacidDRG)
f.write(peptide(aminoacidDRG) + '\n')