我有很多链接,例如http://example.com/2013/1520/i2013i1520p100049.html
或http://example.com/2013/89/i2013i89p60003.html
。
我需要将文件1520
中的HTML文件保存为i2013i1520p100049.html
,将文件夹“89”中的文件保存为i2013i89p60003.html
。
我可以剪断字符串但其他人有另一种长度。
P.S。我正在使用Python。
答案 0 :(得分:2)
使用split()
url = 'http://example.com/2013/1520/i2013i1520p100049.html'
parts = url.split('/')
fn = parts[-1]
dir = parts[-2]
然后拨打电话,保存来源:
import urllib2
fp = urllib2.urlopen(url).read()
fullpath_fn = dir + '/' + fn
with open(fullpath, 'w') as htmlfile:
htmlfile.write(fp)
答案 1 :(得分:2)
您可以使用urlparse.urlsplit和os.path.split:
import os
import urlparse
s = 'http://example.com/2013/1520/i2013i1520p100049.html'
path = urlparse.urlsplit(s).path
print(path)
# /2013/1520/i2013i1520p100049.html
dirname, basename = os.path.split(path)
dirname, basedir = os.path.split(dirname)
print(basedir)
# 1520
print(basename)
# i2013i1520p100049.html
答案 2 :(得分:1)
您可以使用以下内容(如果您想对其执行更复杂的工作):
s = 'http://example.com/2013/1520/i2013i1520p100049.html'
from operator import itemgetter
from urlparse import urlsplit
split_url = urlsplit(s)
path, fname = itemgetter(2, -1)(split_url.path.split('/'))
print path, fname
# 1520 i2013i1520p100049.html
否则:
path, fname = s.rsplit('/', 2)[1:]
答案 3 :(得分:0)
因此,使用这种标准化格式,最快的方法是使用find和slice :)。正则表达式不值得
e.g。
>>> a = "http://example.com/2013/1520/i2013i1520p100049.html or http://example.com/2013/89/i2013i89p60003.html"
>>> lastindex = a.rfind('/')
>>> a[lastindex+1:]
'i2013i89p60003.html'
>>> a[a.rfind('/',0,lastindex)+1:lastindex]
'89'
拆分vs找到一个巨大的网址(是的,这些存在,但通常不是这个大)
>>> a = range(10000)
>>> [a.insert(randint(0,10000),'/') for x in range(0,100)]
>>> a = str(a)
>>> b = time.time(); a.rfind('/'); time.time()-b
58493
1.8835067749023438e-05
>>> b = time.time(); d=a.split('/'); time.time()-b
0.00012683868408203125
更重要的是,你不需要对你的列表进行巨大的重新分配/复制,当你拥有1000个URL时,这不是很有趣
答案 4 :(得分:0)
>>> 'http://example.com/2013/1520/i2013i1520p100049.html'.split('/')[-1]
'i2013i1520p100049.html'
答案 5 :(得分:0)
您可以使用方法split()
:
url = 'http://example.com/2013/1520/i2013i1520p100049.html'
tokens = url.split('/')
file = parts[-1]
folder = parts[-2]
答案 6 :(得分:0)
仅仅是为了它,一个基于正则表达式的答案:
match = re.search(r'([0-9]+)/([a-z0-9]+\.html)$', string)
if match:
folder = match.group(1)
file = match.group(2)