2012-07-12 13 views
0

我想输出makeList [start]的索引到makeList [end]。我有所有正确的开始和结束值,总共约11对。但是,我没有得到正确的输出,因为它没有打印出所有可能的输出。为什么会发生?我输出文件中的数据没有打印出应该有的所有结果

def searchPFAM(fname): 
    with open(fname,'rb') as f: 
     root = etree.parse(f) 
     for lcn in root.xpath("/protein/match[@dbname='PFAM']/lcn"): 
      try: 
      start = int(lcn.get("start")) 
      end = int(lcn.get("end")) 
      yield start, end 
      except (TypeError , ValueError) as e: 
      pass 

uniprotID ='Q14591' 

def createRef(): 
    fileInput = open(uniprotID +'.txt','r') 
    readAA = fileInput.read() 
    store_value = (readAA.partition('\n')) 
    aaSequence = store_value[2].replace('\n', '') 
    makeList = list(aaSequence) 
    return makeList 

makeList = createRef() 

for start, end in searchPFAM(fname): 
    print start, end 
    if start <= end: 
     with open('newfile.txt','w') as fileinput: 
      while start <= end: 
       result = makeList[start] 
       fileinput.write(result) 
       start += 1 

回答

3

只是一个猜测,但你可能想:

with open('newfile.txt','w') as fileinput: 
    for start, end in searchPFAM(fname): 
     print start, end 
     if start <= end: 
      while start <= end: 
       result = makeList[start] 
       fileinput.write(result) 
       start += 1 

你的旧版本只写1点开始/结束循环到该文件,关闭它,然后打开一个新文件(与旧文件名相同),写入1个开始/结束循环,关闭文件...换句话说,你正在用每次循环迭代重写文件。

+0

这个作品谢谢 – 2012-07-12 19:58:49

+2

没问题。乐意效劳。有时候,这些简单的东西坐在那里盯着你,他们很难看到/跟踪。祝你好运。 – mgilson 2012-07-12 19:59:46

0

最常见的原因:您需要在脚本终止前刷新输出文件。从上面

片段:

with open('newfile.txt','w') as fileinput: 
     while start <= end: 
      result = makeList[start] 
      fileinput.write(result) 
      start += 1 
fileinput.flush() 
+3

他正在使用'with',因此当该块被退出时,文件应该自动关闭(并刷新) – Levon 2012-07-12 19:52:24

+0

@Levon,它确实......'fileinput奇怪地保留在作用域中,但实际上是一个关闭的fileobj,所以任何操作都会失败 – 2012-07-12 19:55:13

+0

当我将flush()放入时,我收到了错误消息:ValueError:关闭文件上的I/O操作 – 2012-07-12 19:57:37

相关问题