Python: удалить файлы после того, как я закончу читать с FTP - PullRequest
2 голосов
/ 10 октября 2011

Мой скрипт на python открывает файл gzip с FTP и читает его. Каждый раз, когда я запускаю скрипт, .gz файлы загружаются на мой жесткий диск (папка Sites / htdocs как его python cgi). Я не хочу загружать файлы на жесткий диск или удалять файлы после выполнения скрипта.

Вот снимок моего скрипта:

u = 'http://hapmap.ncbi.nlm.nih.gov/downloads/frequencies/2010-05_phaseIII/'

filename1 = 'allele_freqs_chr' + chromosomes[i] + '_' + populations[0] + '_phase3.3_nr.b36_fwd.txt.gz'
url = u + filename1
try:
    site = urllib.urlretrieve(url,filename1)
except IOError:
    print >> sys.stderr,'Error opening URL.\n'
try: 
    f1 = gzip.open(filename1, 'rb')
except IOError:
    print >> sys.stderr, 'Error opening file1.\n'
    sys.exit(1) 

line=f1.readline()
# ...

Я ценю ваши предложения.

Ответы [ 2 ]

3 голосов
/ 10 октября 2011

os.unlink(filename1) должно работать. Также используйте finally: в вашем блоке try:, чтобы закрыть дескриптор файла следующим образом:

import os
u = 'http://hapmap.ncbi.nlm.nih.gov/downloads/frequencies/2010-05_phaseIII/'
filename1 = 'allele_freqs_chr' + chromosomes[i] + '_' + populations[0] + '_phase3.3_nr.b36_fwd.txt.gz'
url = u + filename1
try:
    site = urllib.urlretrieve(url,filename1)
except IOError:
    print >> sys.stderr,'Error opening URL.\n'
try: 
    f1 = gzip.open(filename1, 'rb')
except IOError:
    print >> sys.stderr, 'Error opening file1.\n'
    sys.exit(1)
else:
    line = f1.readline()
    # ....
finally:
    try:
        f1.close()
    except:
        pass

os.unlink(filename1)
0 голосов
/ 10 октября 2011

Вы можете использовать urllib.urlopen вместо urllib.urlretrieve

fd = urllib.urlopen(url)
s_data = fd.read()                    # These 2 lines are unfortunately
s_stream = StringIO.StringIO(s_data)  # needed in Python < 3.2
f1 = gzip.GzipFile(fileobj=s_stream)

См. Также: http://www.enricozini.org/2011/cazzeggio/python-gzip/ (о том, почему вы должны использовать StringIO)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...