Geçici dosyalar oluşturmaya gerek kalmadan Python'daki bir metin dosyasının üzerine indirmek, yinelemek ve yinelemek istiyorum.Python'da bir gzip dosyasını indirin, ayıklayın ve okuyun
temelde, bu boru, ancak Python
İştecurl ftp://ftp.theseed.org/genomes/SEED/SEED.fasta.gz | gunzip | processing step
kodum var: Ben bu senaryo istiyorum çünkü process.Popen() ya da bir şey kullanmak istemiyorum
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
platform bağımsız olmak
Sorun, Gzip kitaplığının yalnızca dosya adlarını yalnızca argüman olarak kabul ettiği ve tanıtıcıları kabul etmediğidir. "Borulama" nedeni, indirme adımının sadece% 5 kadar CPU kullanması ve ekstraksiyonu ve işlemeyi aynı anda yürütmesi daha hızlı olacaktır.
DÜZENLEME: Çünkü yolu gzip sıkıştırma eser
", GzipFile onun konumunu kaydetmek ve sıkıştırılmış yoluyla geriye ileriye taşımak ve gerektiğinden Bu işe yaramaz "Dosya", bir uzaktan sunucusundan gelen bir bayt akışı olduğunda bu işe yaramaz; tüm yapmanız gereken retri Eve bayt bir seferde, veri akışı aracılığıyla ileri geri hareket ettirin. " - dive into python Ben hatayı
AttributeError: addinfourl instance has no attribute 'tell'
Yani nasıl oluyor
curl url | gunzip | whatever
iş bulmak neden
?
Neden bu ayrı Python dosyalarında değil? python indir.py | python extract.py | python filter.py'? –
Python komut dosyalarının sistem komutlarından python komut dosyalarından yürütülmesi dağınık olduğu için. Ayrıca, bunun platformdan bağımsız olmasını (Windows kullanan kişilerde herhangi bir problem yaşanmayacağını) ve sistem komutlarını çalıştırmanın bunu zorlaştırdığını söyledim. DOS bile boru tesisatını destekliyor mu? –