【问题标题】:data in my outputfile didn't print all result it should have我的输出文件中的数据没有打印出它应该有的所有结果
【发布时间】:2012-07-12 19:42:25
【问题描述】:

我正在尝试将 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

【问题讨论】:

    标签: python list return lxml


    【解决方案1】:

    只是猜测,但您可能想要:

    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 个开始/结束循环,关闭文件......在其他换句话说,您在每次循环迭代时都在重写文件。

    【讨论】:

    • 没问题。乐意效劳。有时这些简单的东西就坐在那里盯着你看,很难看到/追踪。祝你好运。
    【解决方案2】:

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

    sn-p 从上面:

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

    【讨论】:

    • 他正在使用with,因此在退出该块时文件应该自动关闭(并刷新)
    • @Levon 确实如此...fileinput 奇怪地保留在范围内,但实际上是一个关闭的 fileobj,因此任何操作都会失败
    • 当我将 flush() 放入说中时收到错误消息:ValueError: I/O operation on closed file
    • @Levon 说得对。 @ChadD 它确实保留在范围内,因为 with 子句不会像 python iffor 语法那样将“新” var 限制在 with 范围内
    • @PhilCooper 我不太明白你的意思是什么?顺便说一句,我该如何解决?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多