Python file.tell()给出错误的值

时间:2015-11-27 06:20:25

标签: python python-2.7

我在Windows 7 64字节中使用Spyder 2.3.7和Python 2.7.10。

我想读取一个文本文件,并希望在读取一行后读取文件中的位置;主要原因是稍后能够在一些搜索完成后移回文件中。 无论如何,当我使用以下代码时:

Overall accuracy
Overall accuracy
2.2603e+03
2.3179e+03
2.5265e+03
4.8463e+03
1.7547e+03
3.0143e+03
3.1387e+03


Overall accuracy
Overall accuracy
2.2414e+03
3.9409e+03
1.8902e+03
4.1157e+03


Overall accuracy
Overall accuracy
2.2275e+03
1.3579e+03
2.3712e+03
6.4970e+03
5.8891e+03



    SPLITBIB.STY     -- N. MARKEY <markey@lsv.ens-cachan.fr>
                    v1.17 -- 2005/12/22

This package allows you to split a bibliography into several categories
and subcategories. It does not depend on BibTeX, and any bibliography
may be split and reordered.

split­bib – Split and re­order your bib­li­og­ra­phy

This pack­age en­ables you to split a bib­li­og­ra­phy into sev­eral cat­e­gories and sub­cat­e­gories. It does not de­pend on BibTeX: any bib­li­og­ra­phy may be split and re­ordered.

文件testtext1的内容是(这只是一个例子):

916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916
916

这让我产生了非常奇怪的输出:

System.Diagnostics.Process.Start("CMD.exe","taskkill /f /im excel.exe");

上面的代码有什么问题,如果我使用二进制读取,没有什么不同。

1 个答案:

答案 0 :(得分:2)

混合迭代文件和使用文件方法将无法工作,因为迭代涉及使用预读缓冲区。请改用file.readline来使用texelFetch()

file.tell

根据file.next documentation

  

文件对象是它自己的迭代器,例如... while True: line = ff.readline() if not line: break numline = numline + 1 position = ff.tell() print(position) ... 返回iter(f)   (除非f已关闭)。当文件用作迭代器时,通常在   一个for循环(例如,f),.   重复调用for line in f: print line.strip()方法。此方法返回下一个输入   当文件打开时,当命中EOF时,或者引发StopIteration   用于读取(当文件打开以进行写入时,行为未定义)。   为了使for循环成为最有效的循环方式   文件的行(非常常见的操作), next()方法使用a   隐藏的预读缓冲区。使用预读的结果   缓冲区,将next()与其他文件方法相结合(如next())   不行。但是,使用readline()将文件重新定位到   绝对位置将刷新预读缓冲区。