使用 re.search 搜索文件并将输出保存到新文件

searching file using re.search and saving output to new file

我已经为此纠结了一段时间:

我正在文件中搜索模式并希望将输出保存到另一个文件。 但是我不断收到错误消息:

'str' object has no attribute 'write' 

这是在 Google Colab 上抓取文件的代码:

!wget 'ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_sprot.dat.gz'

!gunzip uniprot_sprot.dat.gz

这是我试过的:

import re

with open('uniprot_sprot.dat', 'r') as f:
  for i in f:
    #if re.search(r"^ID|^SQ|^\s", i):
    if re.search(r'^ID|^\s', i):
      print(i, file = 'output.txt')

我可以很好地打印到标准输出,但是在写入文件时出现上述错误消息。

所需的输出将是一个包含以下内容(更多行)的文件:

ID   ACDH3_MYCVP             Reviewed;         306 AA.

 MADKKSVAIV GSGNISTDLL YKLLRSEWLE PRWMIGIDPE SEGLARARKL GLETSHEGVD

 WLLAQSELPD MVFEATSAYV HKAAAPRYAE AGIRAIDLTP AAVGPGVIPP ANLRAHLDAP

 NVNMVTCGGQ ATIPMVYAVS RVVEVPYAEI VASVSSASAG PGTRANIDEF TKTTSAGVQN

 IGGAQRGKAI IILNPAEPPM IMRDTIFCAI PEHADHAAIT QSIKDVVAEV QTYVPGYRLL

 NEPQFDEPSV VNGGNHVVTV FVEVEGAGDY LPPYAGNLDI MTAAATKVGE EIAKESLAAT

 AGGAQA

ID   ACDH3_NOCFA             Reviewed;         328 AA.

 MNHMSDPTTV KVAVIGSGNI GTDLMIKVIR ...

谢谢

这个

print(i, file = 'output.txt')

不是正确的用法,file应该是类文件对象(流);默认为当前 sys.stdout. 用法示例:

i = [1,2,3]
with open("output.txt", "w") as f:
    print(i, file=f)

您可以 open 输出文件,与输入文件相同

with open('uniprot_sprot.dat') as f_in, open('output.txt', 'w') as f_out:
    for i in f_in:
        if re.search(r'^ID|^\s', i):
            f_out.write(i)