循环时关闭文件会创建fi

2024-05-20 03:14:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个文本文件test.fasta的行中循环,当我到达format1的行时,我想创建一个newFile1,跳过一行,然后将下面的f行写入newFile1,直到到达另一行format1,此时我想关闭newFile1,创建newfile2等等

到目前为止我所拥有的:

import re

with open('test.fasta', 'r') as seqs:

    seqFile = (open('throwaway.txt', 'a+'))

    for line in seqs:
        if re.search('^>[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z]', line):
            seqFile.close()
            seqFile = open('%s.fasta' % line, 'a+')
            seqs.next()
        else:
            seqFile.write('%s' % line)

    seqFile.close()

这段代码运行正常,输出是我所期望的。问题是在启动循环之前,我需要创建throwaway.txt文件,这样循环的第一次迭代就不会因为seqFile不存在而失败。如果我不包括它所在的seqFile.close(),那么我只留下一堆打开的文件

我可以添加一个if语句,它只处理没有打开文件的第一次迭代,但是我想知道是否有更优雅的方法来完成它


Tags: 文件testretxtcloseiflineopen
1条回答
网友
1楼 · 发布于 2024-05-20 03:14:42

对我来说,避免依赖伪文件存在的最直接的方法是在尝试调用close时通过循环第一次捕获该异常:

if re.search('^>[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z]', line):
  try:
    seqFile.close()
  except NameError: # Assuming you haven't set seqFile else where before the first time through the loop
    pass
  seqFile = open('%s.fasta' % line, 'a+')
  # Do everything else you were going to do

相关问题 更多 >