2013-03-01 57 views
0

第一次执行此程序时,除了新行之外,生成的文件中没有任何内容。但是第二次执行它时,它会正确写入'out.txt',但第一次执行的新行仍然存在。为什么第一次不正常?写入文件仅在第一次执行时给出新行

bhaarat = open('bhaarat.txt', 'r+') 
bhaarat_read = bhaarat.read() 

out = open('out.txt', 'r+') 
out_read = out.read() 

bhaarat_split = bhaarat_read.split() 

for word in bhaarat_split: 
    if word.startswith('S') or word.startswith('H'): 
     out.write(word + "\n") 

bhaarat.write('\n23. English\n') 
print out_read 
print bhaarat_read 

bhaarat.close() 
out.close() 
+0

您可以转储文件的内容以查看结构吗? – Ketouem 2013-03-01 08:58:18

+0

我很抱歉,我很新,所以我不太清楚你的意思。你的意思是'猫文件'来看看它的内容? – lche 2013-03-01 09:08:54

回答

0

这是Windows的问题。解决方法(see python mailing list)是使用

f.seek(f.tell()) 
调用之间

read()write()上用的+一个选项打开的文件f

根据您的问题,您必须先拨bhaarat.seek(bhaarat.tell()),然后用bhaarat_read = bhaarat.read()读取文件,然后再用bhaarat.write('\n23. English\n')写入文件。你的out也一样。

在Python3这个问题是固定的,所以更有理由切换:)


编辑 下面的代码对我的作品。文件bhaarat.txtout.txt都必须存在。

bhaarat = open('bhaarat.txt', 'r+') 
bhaarat_read = bhaarat.read() 
bhaarat.seek(bhaarat.tell()) 
out = open('out.txt', 'r+') 
out_read = out.read() 
out.seek(out.tell()) 
bhaarat_split = bhaarat_read.split() 

for word in bhaarat_split: 
    if word.startswith('S') or word.startswith('H'): 
     out.write(word + "\n") 

bhaarat.write('\n23. English\n') 
print out_read 
print bhaarat_read 

bhaarat.close() 
out.close() 
+0

bhaarat.seek(f.tell())给了我一个错误,所以我尝试了bhaarat.seek(bhaarat.tell())。我不确定这是否正确。 但是,我得到同样的问题... – lche 2013-03-01 09:23:11

+0

@ user69498这是我的代码中的错误:)你必须使用'bhaarat.seek(bhaarat.tell())''。对不起 – halex 2013-03-01 09:24:49

+0

@ user69498你是否也在你的代码中加入了'out.seek(out.tell())'? – halex 2013-03-01 09:27:55

相关问题