【发布时间】:2015-05-02 11:06:07
【问题描述】:
我有一个如下所示的文件:
<s0> 3
line1
line2
line3
<s1> 5
line1
line2
<s2> 4
etc. up to more than a thousand
每个序列都有一个像<s0> 3 这样的标题,在这种情况下,它表示后面有三行。在上面的例子中,<s1>下面的行数是两行,所以我必须将标题更正为<s1> 2。
我下面的代码挑选出序列标题和它们下面的正确行数。但是由于某种原因,它永远不会得到最后一个序列的细节。我知道出了点问题,但我不知道是什么。有人可以指出我做错了什么吗?
import re
def call():
with open('trial_perl.txt') as fp:
docHeader = open("C:\path\header.txt","w")
c = 0
c1 = 0
header = []
k = -1
for line in fp:
if line.startswith("<s"):
#header = line.split(" ")
#print header[1]
c = 0
else:
c1 = c + 1
c += 1
if c == 0 and c1>0:
k +=1
printing = c1
if printing >= 0:
s = "<s%s>" % (k)
#print "%s %d" % (s, printing)
docHeader.write(s+" "+str(printing)+"\n")
call()
【问题讨论】:
-
非常感谢你们的投入,我真的很感激他们,他们帮助我的知识和理解,以及更多的逻辑思维。我已经能够通过在退出 for 循环时添加 docHeader.write("
%d\n" % (k+1, c1)) 来解决这个问题。有了你的投入,我的编码变得更好了!!!!!!!!!
标签: python algorithm file-io text-processing text-parsing