我正在尝试从具有以下名称模式的远程文件下载每日文件转储: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)
答案 0 :(得分:0)
在远程站点上没有目录列表是不可能的,除非您想使用暴力查找文件名。
如果目录列表可用,请打开目录索引页面,解析它,例如使用BeautifulSoup,提取文件列表,然后使用正则表达式找到与您要查找的格式相匹配的文件。
答案 1 :(得分: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]))
这当然可能需要调整,具体取决于目录列表的实际输出结果。