<p>为了检查文件是<code>good</code>还是<code>bad</code>,我们将使用文件的第一行和最后一行,考虑到:</p>
<ol>
<li>如果第一行不是以<code>o</code>开头,则文件是错误的</li>
<li>如果最后一行没有以<code>o</code>结尾,则文件是坏的</li>
<li>如果第一行和最后一行以<code>o</code>开头,则文件是好的</li>
</ol>
<p>你知道吗列表.txt地址:</p>
<pre><code>o 123456789.000 10.10.10.10 3 30 10 -
n A-123456 1452830400 1 1452
n C-73652 1452830400 1 23154
n B-967845 1452830400 1 37451
n G-809573 1452830400 1 92673
o 123456789.000 10.10.10.10 3 30 10 some_random_text_alphanumeric_jdjfdjfdfhdkjfhdkhfdhfdfdfhkdhfkdjfdkjfkdfdkfdkjnc maxbgrsdfuyhlwkjdnkshbvhsgdvsdsjdbskdhskdjoihe73njndedejdoekekdednd
o 123456789.000 10.10.10.10 3 30 10 -
n A-123456 1452830400 1 1452
n C-73652 1452830400 1 23154
n B-967845 1452830400 1 37451
n G-809573 1452830400 1 92673
# Should be indication of request i.e., line beginning with o, followed some data
o 123456789.000 10.10.10.10 3 30 10 -
n A-123456 1452830400 1 1452
n C-73652 1452830400 1 23154
n B-967845 1452830400 1 37451
n G-809573 1452830400 1 92673
o 123456789.000 10.10.10.10 3 30 10 some_random_text_alphanumeric_jdjfdjfdfhdkjfhdkhfd
</code></pre>
<p>因此:</p>
<pre><code>logFile = "list.txt"
with open(logFile) as f:
content = f.readlines()
# you may also want to remove empty lines
content = [l.strip() for l in content if l.strip()]
for line in content:
if line.startswith("o"): # check if the first line starts with o
if str(content[-1]).strip("[']").split()[0] == 'o': # check if last line starts with o
print("File is good.")
else:
print("File is bad.")
break
else: # end if the first line does not start with o
print("File is bad.")
break
</code></pre>
<p>编辑:</p>
<p>要获得<strong>有效<strong>对<code>o</code>之间的所有响应:</p>
<p>你知道吗列表.txt地址:</p>
<pre><code>o 123456789.000 10.10.10.10 3 30 10 001-
n A-123456 1452830400 1 14521
n C-73652 1452830400 1 231541
n B-967845 1452830400 1 37451
n G-809573 1452830400 1 926731
o 123456789.000 10.10.10.10 3 30 10 some_random_text_alphanumeric_jdjfdjfdfhdkjfhdkhfdhfdfdfhkdhfkdjfdkjfkdfdkfdkjnc maxbgrsdfuyhlwkjdnkshbvhsgdvsdsjdbskdhskdjoihe73njndedejdoekekdednd
o 123456789.000 10.10.10.10 3 30 10 002-
n A-123456 1452830400 1 14522
n C-73652 1452830400 1 231542
n B-967845 1452830400 1 37452
n G-809573 1452830400 1 926732
o 123456789.000 10.10.10.10 3 30 10 some_random_text_alphanumeric_jdjfdjfdfhdkjfhdkhfdhfdfdfhkdhfkdjfdkjfkdfdkfdkjnc maxbgrsdfuyhlwkjdnkshbvhsgdvsdsjdbskdhskdjoihe73njndedejdoekekdednd
o 123456789.000 10.10.10.10 3 30 10 003-
n A-123456 1452830400 1 14523
n C-73652 1452830400 1 231543
n B-967845 1452830400 1 374513
n G-809573 1452830400 1 926733
</code></pre>
<p>因此:</p>
<pre><code>import re
def GetTheResponses(infile):
with open(infile) as fp:
red = fp.read()
for result in re.findall('o (.*?)o ', red, re.S):
print(result)
GetTheResponses('list.txt')
</code></pre>
<p><strong>输出</strong>:</p>
<pre><code>123456789.000 10.10.10.10 3 30 10 001-
n A-123456 1452830400 1 14521
n C-73652 1452830400 1 231541
n B-967845 1452830400 1 37451
n G-809573 1452830400 1 926731
123456789.000 10.10.10.10 3 30 10 002-
n A-123456 1452830400 1 14522
n C-73652 1452830400 1 231542
n B-967845 1452830400 1 37452
n G-809573 1452830400 1 926732
</code></pre>
<p>编辑2(为了更好的可读性):</p>
<pre><code>count = 1
for result in re.findall('o (.*?)o ', red, re.S):
print("Response Packet: {}".format(count))
print("\n".join(result.split("\n")[1:]))
count +=1
</code></pre>
<p><strong>输出</strong>:</p>
<pre><code>Response Packet: 1
n A-123456 1452830400 1 14521
n C-73652 1452830400 1 231541
n B-967845 1452830400 1 37451
n G-809573 1452830400 1 926731
Response Packet: 2
n A-123456 1452830400 1 14522
n C-73652 1452830400 1 231542
n B-967845 1452830400 1 37452
n G-809573 1452830400 1 926732
</code></pre>