По сути, это канал, но на Python< /p>
Код: Выделить всё
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
Проблема в том, что библиотека Gzip принимает в качестве аргументов только имена файлов, а не дескрипторы. Причина «конвейера» заключается в том, что этап загрузки использует только ~5% ЦП, и одновременное извлечение и обработка будут выполняться быстрее.
РЕДАКТИРОВАТЬ:
Это не сработает, потому что
"Из-за особенностей сжатия
gzip
GzipFile необходимо сохранить его
положение и перемещаться вперед и
назад по сжатому файлу.
Это не работает, когда «файл» представляет собой
поток байтов, поступающий с удаленного
> сервер; все, что вы можете с ним делать, это
получать байты по одному, а не перемещаться
вперед и назад по потоку данных
." - погрузитесь в Python
Вот почему я получаю ошибку
Код: Выделить всё
AttributeError: addinfourl instance has no attribute 'tell'
Подробнее здесь: https://stackoverflow.com/questions/354 ... -in-python