Python:将gzip文件转换为普通文件

Python:将gzip文件转换为普通文件,python,gzip,biopython,Python,Gzip,Biopython,我有一个ent文件,压缩到.gz。我需要阅读它并将其放入Biopython解析器。问题是解析器采用文件路径或文件对象,但我采用的是gzip文件。现在我把它转换成这样: file_path = 'file.ent.gz' # path to current file file = gzip.open(file_path, 'rb') content = file.read() # its content write_path = 'temp.ent' # let's write it bac

我有一个ent文件,压缩到.gz。我需要阅读它并将其放入Biopython解析器。问题是解析器采用文件路径或文件对象,但我采用的是gzip文件。现在我把它转换成这样:

file_path = 'file.ent.gz' # path to current file

file = gzip.open(file_path, 'rb') 
content = file.read() # its content

write_path = 'temp.ent' # let's write it back but as ordinary file
write_file = open(write_path, 'w')
write_file.write(content)
write_file.close()

third_file = open(write_path, 'r') #open this ordinary noncompressed file

structure = parser.get_structure('', third_file) #and finally put it into the parser
正如您所看到的,这个解决方案是丑陋的,但最重要的是它需要大量的时间,因为它写入驱动器并读取两次,这是一个问题,只要我必须做数百万这样的操作


谷歌搜索根本帮不了我,医生也帮不了我。有可能使转换更快吗?

您不需要转换任何内容,只需向解析器提供由
gzip.open()返回的流即可:

原因:
open()
返回文件内容的文件流
gzip.open()
返回未压缩文件内容的文件流。这正是你需要的。这是老话的一个很好的例子:

如果它看起来像鸭子,走路像鸭子,那它就是鸭子


您不需要转换任何内容,只需将
gzip.open()返回的流提供给解析器即可:

原因:
open()
返回文件内容的文件流
gzip.open()
返回未压缩文件内容的文件流。这正是你需要的。这是老话的一个很好的例子:

如果它看起来像鸭子,走路像鸭子,那它就是鸭子


gzip.open
会返回文件对象,不是吗?至少文档中明确指出:
gzip.open
会返回一个文件对象,不是吗?至少文档明确地说:这对我不起作用。在您的案例中输入(finput)返回,但parser.get_结构,如文档所述,需要PDB文件的文件名或一个已编辑的打开文件句柄:哦,它真的很有效,谢谢!解析器不应该依赖于传递给它的对象的类型,而应该只依赖于
.read()
方法的存在来获取流内容。编辑:幸运的是,它看起来确实是这样的:)这对我不起作用。在您的案例中输入(finput)返回,但parser.get_结构,如文档所述,需要PDB文件的文件名或一个已编辑的打开文件句柄:哦,它真的很有效,谢谢!解析器不应该依赖于传递给它的对象的类型,而应该只依赖于
.read()
方法的存在来获取流内容。编辑:幸运的是,它看起来确实如此:)
file_path = 'file.ent.gz' # path to current file
with gzip.open(file_path, 'rb') as finput:
    structure = parser.get_structure('', finput)