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

时间:2017-10-05 11:45:54

标签: python gzip biopython

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

#include <stdio.h>
#include <string.h>

int main(void) {
    const char *stringone = "who cares if aaa one more light goes out aaa "
                            "in the sky of a million aaa stars, aaa well i"
                            " do if the star is you \0";
    const char *breaker = "aaa";
    const char *p;

    while ((p = strstr(stringone, breaker)) != NULL) {
        /* print the substring before the breaker */
        printf("%.*s\n", (int)(p - stringone), stringone);
        /* skip the breaker */
        stringone = p + strlen(breaker);
    }
    /* no separator left: print the rest of the string */
    printf("%s\n", stringone);
    return 0;
}

正如你所看到的,这个解决方案是丑陋的,但最重要的是它需要大量的时间,因为它写入驱动器并读取它两次,这是一个问题,只要我必须做数百万这样的操作。

谷歌搜索根本没有帮助我,文档也没有。是否有可能使转换更快?

1 个答案:

答案 0 :(得分:4)

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

file_path = 'file.ent.gz' # path to current file
with gzip.open(file_path, 'rb') as finput:
    structure = parser.get_structure('', finput)

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

  

如果它看起来像鸭子,像鸭子一样走路,它就是一只鸭子