Python: 读取FTP后删除文件

2 投票
2 回答
827 浏览
提问于 2025-04-17 04:02

我的Python脚本从FTP服务器打开一个gzip文件并读取它。每次我运行这个脚本的时候,.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 个回答

0

你可以用 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)

3

os.unlink(filename1) 这个命令应该可以正常使用。另外,在你的 try: 代码块中,记得使用 finally: 来关闭文件描述符,像这样:

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)

撰写回答