我有一个标题行需要在文本文件的开头打印,然后下一行应该包含有关有多少行数据的信息。
最终输出文件应包含以下内容:
\n
\n
问题是如何在不知道有多少行字符串的情况下如何满足(2)内容?
我一直这样做:
" "
个字符" "
的其余部分取消为了举例,我使用random.random()
来生成行数,我一直这样做:
import random
fout = open('testoverwrite','w')
header = "%% this is a header line"
print>>fout, header
print>>fout, "".join((" ")*50)
total = 0
numrows = int(100*random.random())
for i in range(numrows):
j = int(100*random.random())
total+=j
print>>fout, j
fout.seek(len("%% this is a header line\n"))
#print len(str(numrows)+" "+str(total))
if len(str(numrows)+" "+str(total)) < 50:
fout.write(str(numrows)+" "+str(total))
fout.close()
有更好的方法吗?
答案 0 :(得分:3)
好吧,我不明白为什么你想要这样做,但如果你必须;-)为了让这个跨平台工作,seek()
并不总是有效您认为它适用于以文本模式打开的文件的方式。为了使文本模式文件可靠地运行,您只能seek()
到tell()
之前返回的位置。因此,在编写标题行后,请执行(例如):
print>>fout, header
pos = fout.tell()
pos
此时可能或不等于len(header) + 1
(取决于平台)。但是稍后寻找将到达标题后面的行的开头。所以替换你的:
fout.seek(len("%% this is the header line\n"))
(这很奇怪,因为那不是你之前写的标题行):
fout.seek(pos)
然后下一次写入将覆盖文件第二行中的前导字符。