0

我正在尝试从具有以下名称模式的远程文件下载每日文件转储:somename.yyyymmdd_HHmm.zip. yyyymmdd是 4 位数的年份、2 位数的月份和 2 位数的日期,HH 是 2 位数的小时,最后一个 mm 是 2 位数的分钟。如果文件是今天生成的,它可能是somename.20120416_0423.zip. '_0423' 也可能是 0412',这取决于它是在凌晨 4:23 还是凌晨 4:12 完成倾倒。

我的问题是,如果知道我们上面知道的内容,如何使用正则表达式下载这个文件?或者,还有更好的方法?

import urllib2

ref = regexedFilename # this would be the (sort of) unknown file name
f = urllib2.openfile(ref)
4

2 回答 2

0

除非您想使用蛮力找出文件名,否则在远程站点上没有目录列表是不可能的。

如果目录列表可用,请打开目录索引页面,例如使用 BeautifulSoup 解析它,提取文件列表,然后使用您的正则表达式查找与您正在寻找的格式匹配的文件。

于 2012-04-16T20:09:27.497 回答
0

假设您可以看到目录列表,并且无论如何您都必须使用正则表达式,那么没有理由在 BeautifulSoup 上浪费您的时间。

import re
file_list = re.findall('.*?\.(\d+)_(\d+)\.zip', directory_page_text)
sorted_file_list = sorted(file_list, key=lambda x: (x[0], x[1]))

当然,这可能需要根据目录列表的实际输出进行调整。

于 2012-04-16T22:10:33.013 回答