当使用seek(0,0)时,它会随意删除python中文件顶部的行

时间:2014-08-07 07:09:01

标签: python file seek

import datetime         #To use date time functionality

file_log = open('.\Log_Detailed.log', 'w')
file_log.write("1 \n");file_log.write("2 \n");file_log.write("3 \n");file_log.write("4 \n");file_log.write("5 \n");file_log.write("6 \n");file_log.write("7 \n");file_log.write("8 \n");file_log.write("9 \n");file_log.write("10 \n");
file_log.write("\n----------------------------------------------------------------------------\n")
file_log.write("                             LTE RRC PARSER                                 \n")
file_log.write("----------------------------------------------------------------------------\n")
file_log.write("\n\n")
file_log.write("Cases Execution Started At : " + datetime.datetime.now().ctime())
file_log.write("\n\n")

file_log.seek(0);             #This line is the problem
file_log.write("\n***********************SUMMARY*************************\n")
file_log.write("No. of cases Passed =\n");
file_log.write("No. of cases Failed =\n");
file_log.write("*********************************************************\n");
file_log.close();

当我运行上面的代码注释掉“file_log.seek(0,0)”时,它会输出以下输出:

1

2

3

4

5

6

7

8

9

10

----------------------------------------------------------------------------
                         LTE RRC PARSER                                 
----------------------------------------------------------------------------

案件执行开始时间:2014年8月7日星期四12:26:32

但是当我运行上面的代码时,输​​出显示如下: -

***********************SUMMARY*************************

没有。通过的案件=

没有。案例失败=

*********************************************************

----------------------------------------------------------------------------

案件执行开始时间:2014年8月7日星期四12:35:28

正如您在第二个输出中看到的那样,许多行被模糊地覆盖了!使用seek(0,0)后,它会覆盖比需要更多的行。我想要的是在LTE RRC之前写入的摘要部分。 Plz帮助!

2 个答案:

答案 0 :(得分:0)

  

正如您在第二个输出中看到的那样,许多行被模糊地覆盖了!

不,这不是含糊不清的。

它会根据需要覆盖完全相同的字节数(!)。

file_log.write("\n***********************SUMMARY*************************\n")
file_log.write("No. of cases Passed =\n");
file_log.write("No. of cases Failed =\n");
file_log.write("*********************************************************\n");

准确地将159个字节写入文件(除非您使用Windows和文本文件,在这些情况下\n替换为\r\n,最终会有164个字节)。

因此文件的前159个(或164个)字节被覆盖。由于文件中的行很短,因此会丢失更多的行,就像它们更长一样。

答案 1 :(得分:0)

文件不是。它们是字符或字节

当你回到开头时,你会覆盖那么多角色。 如果你需要这样做,你必须提前计算字节数,这样你就可以留出足够的空间。

也许你可以像这样编写文件,留下空格(在=之后)以便稍后覆盖。

file_log.write("\n***********************SUMMARY*************************\n")
file_log.write("No. of cases Passed =        \n");
file_log.write("No. of cases Failed =        \n");
file_log.write("*********************************************************\n");
file_log.write("\n----------------------------------------------------------------------------\n")
file_log.write("                             LTE RRC PARSER                                 \n")
file_log.write("----------------------------------------------------------------------------\n")
file_log.write("\n\n")
file_log.write("Cases Execution Started At : " + datetime.datetime.now().ctime())
file_log.write("\n\n")