查找文件中短语的行号

时间:2013-11-21 21:11:18

标签: python file-io

我有一个看起来像这样的文件(只有一小部分):

õ õ ø         ø õ ø         ø ø ø         ø ø ø         ø ø ø         ø ø Øó         ø Øó Ùó         õ     Ïó ø         ø Ïó Ðó         ø Ðó ø         ø Ðó Öó         ø Öó Øó         rö sö ø         ø sö ø           ø ø ø         ø ø ø         ø ø ø         ø ø  ø         ø  ø !ø         !ø  ø "ø         !ø "ø #ø           #ø "ø $ø         #ø $ø %ø         %ø $ø &ø         %ø &ø 'ø         'ø &ø (ø         'ø (ø )ø         )ø (ø   *ø         )ø *ø +ø         +ø *ø ,ø         +ø ,ø -ø         -ø ,ø .ø         -ø .ø /ø         /ø .ø 0ø           /ø 0ø 1ø         1ø 0ø 2ø         1ø 2ø 3ø         3ø 2ø 4ø         3ø 4ø 5ø         5ø 4ø 6ø         5ø 6ø   7ø         7ø 6ø 8ø         7ø 8ø 9ø         9ø 8ø :ø         9ø :ø ;ø         ;ø :ø <ø         ;ø <ø =ø           =ø <ø >ø         ) 
End of Binary Section   2013)    
(0 "Zone variables:")

我找到了一个看起来像这样的片段:

f = open('D:/bat_new.msh','rb')
line_num = 0
search_phrase = '(0 "Zone variables:")'

for line in f.readlines():
    line_num += 1
    if line.find(search_phrase) >= 0:
        print line_num

当我在上面的片段上运行时,我得到行号30308,但如果我在Notepad ++中打开文件,则行号为60533。

有人可以帮忙吗?

最后,我想跳过阅读此行上方的内容,只阅读下面的条目。

1 个答案:

答案 0 :(得分:1)

如果没有实际访问该文件,除了猜测之外,没有办法告诉你发生了什么。

但我估计我会给出2:1的赔率。

Windows文本文件使用双字符序列\r\n作为换行符。 Python二进制模式文件使用单字符序列\n

当你处理实际的文本文件时,如果你算错了,它就不会产生很大的不同 - 每个\r\n只有一个\n,并且没有任何其他文件文件中包含\n个字符,因此您将获得与Notepad ++相同的计数。

但是你的文件嵌入了二进制数据。如果数据是完全随机的,则1/256的字符将是裸\n,但只有1/65536的双字符序列将是\r\n。显然,从你的代码片段来看,数据并非完全随机。但是,你的代码仍然可能会找到比Notepad ++找到\n序列更多\r\n个字符。