我有 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;
}
正如你所看到的,这个解决方案是丑陋的,但最重要的是它需要大量的时间,因为它写入驱动器并读取它两次,这是一个问题,只要我必须做数百万这样的操作。
谷歌搜索根本没有帮助我,文档也没有。是否有可能使转换更快?答案 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()
返回未压缩文件内容的文件流。这正是你需要的。这是古老谚语的一个很好的例子:
如果它看起来像鸭子,像鸭子一样走路,它就是一只鸭子