我有一个看起来像这样的文件(只有一小部分):
õ õ ø ø õ ø ø ø ø ø ø ø ø ø ø ø ø Øó ø Øó Ùó õ Ïó ø ø Ïó Ðó ø Ðó ø ø Ðó Öó ø Öó Øó 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。
有人可以帮忙吗?
最后,我想跳过阅读此行上方的内容,只阅读下面的条目。
答案 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
个字符。