删除部分路径

时间:2012-03-11 18:36:36

标签: python regex

我有以下数据:

/​share/​Downloads/​Videos/​Movies/​Big.Buck.Bunny.​720p.​Bluray.​x264-BLA.​torrent/Big.Buck.Bunny.​720p.​Bluray.​x264-BLA

但是,我不想在其中使用“Big.Buck.Bunny.720p。Bluray.x264-BLA.torrent /”,我希望路径如下:

/​share/​Downloads/​Videos/​Movies/Big.Buck.Bunny.​720p.​Bluray.​x264-BLA

使用正则表达式我基本上想要数学中包含* .torrent。/,我怎样才能在regexp中实现这一点?

谢谢!

5 个答案:

答案 0 :(得分:12)

您甚至不需要正则表达式。您可以使用os.path.dirnameos.path.basename

os.path.join(os.path.dirname(os.path.dirname(path)),
             os.path.basename(path))

其中path是文件的原始路径。

或者,您也可以使用os.path.split,如下所示:

dirname, filename = os.path.split(path)
os.path.join(os.path.dirname(dirname), filename)

注意这将假设您要删除的内容是包含路径中文件的目录名称,如问题示例中所示。

答案 1 :(得分:4)

您可以在不使用正则表达式的情况下执行此操作:

>>> x = unicode('/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA.torrent/Big.Buck.Bunny.720p.Bluray.x264-BLA')
>>> x.rfind('.torrent')
66
>>> x[:x.rfind('.torrent')]
u'/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA'

答案 2 :(得分:1)

  

我基本上想要数学中包含* .torrent。/,我怎样才能在regexp中完成这个?

您可以使用:

[^/]*\.torrent/

假设最后.是一个错字。

答案 3 :(得分:1)

给定path='/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA.torrent/Big.Buck.Bunny.720p.Bluray.x264-BLA'

您可以使用正则表达式

来执行此操作
re.sub("/[^/]*\.torrent/","",path)

您也可以在没有正则表达式的情况下执行此操作

'/'.join(x for x in path.split("/") if x.find("torrent") == -1)

答案 4 :(得分:0)

你的问题有点含糊不清,但这是剥离你想要的一种方法:

import re
s = "/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA.torrent/Big.Buck.Bunny.720p.Bluray.x264-BLA"

c = re.compile("(/.*/).*?torrent/(.*)")
m = re.match(c, s)
path = m.group(1)
file = m.group(2)
print path + file

>>> ## working on region in file /usr/tmp/python-215357Ay...
/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA