gpt4 book ai didi

python - 在 Python 中下载、提取和读取 gzip 文件

转载 作者:太空狗 更新时间:2023-10-29 22:23:58 25 4
gpt4 key购买 nike

我想用 Python 下载、提取和迭代文本文件,而无需创建临时文件。

基本上,这个管道,但是在 python 中

curl ftp://ftp.theseed.org/genomes/SEED/SEED.fasta.gz | gunzip | processing step

这是我的代码:

def main():
import urllib
import gzip

# Download SEED database
print 'Downloading SEED Database'
handle = urllib.urlopen('ftp://ftp.theseed.org/genomes/SEED/SEED.fasta.gz')


with open('SEED.fasta.gz', 'wb') as out:
while True:
data = handle.read(1024)
if len(data) == 0: break
out.write(data)

# Extract SEED database
handle = gzip.open('SEED.fasta.gz')
with open('SEED.fasta', 'w') as out:
for line in handle:
out.write(line)

# Filter SEED database
pass

我不想使用 process.Popen() 或任何东西,因为我希望这个脚本独立于平台。

问题是 Gzip 库只接受文件名作为参数而不接受句柄。 “管道”的原因是下载步骤仅使用 ~5% CPU,同时运行提取和处理会更快。


编辑:这是行不通的,因为

"Because of the way gzip compression works, GzipFile needs to save its position and move forwards and backwards through the compressed file. This doesn't work when the “file” is a stream of bytes coming from a remote server; all you can do with it is retrieve bytes one at a time, not move back and forth through the data stream." - dive into python

这就是我得到错误的原因

AttributeError: addinfourl instance has no attribute 'tell'

那么curl url | 如何实现呢?压缩 |什么工作?

最佳答案

只要 gzip.GzipFile(fileobj=handle) 就可以了——换句话说,“Gzip 库只接受文件名作为参数而不接受句柄”是不正确的",您只需使用 fileobj= 命名参数。

关于python - 在 Python 中下载、提取和读取 gzip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3548495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com