如何从URL中删除文件名?

时间:2013-07-26 20:48:49

标签: python html string

我有很多链接,例如http://example.com/2013/1520/i2013i1520p100049.htmlhttp://example.com/2013/89/i2013i89p60003.html

我需要将文件1520中的HTML文件保存为i2013i1520p100049.html,将文件夹“89”中的文件保存为i2013i89p60003.html

我可以剪断字符串但其他人有另一种长度。

P.S。我正在使用Python。

7 个答案:

答案 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.urlsplitos.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)