2012-03-11 4 views
3

je les données suivantes:supprimer une partie du chemin

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

Cependant, je ne veux pas avoir "Big.Buck.Bunny 720p Bluray x264-BLA.torrent /..." En elle Je veux que le chemin soit comme:

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

Avec des expressions régulières, je veux essentiellement à quoi que ce soit de mathématiques qui détient * .torrent /, comment puis-je arriver à regexp.?

Merci!

+0

Vous pouvez le déplacer dans la structure de fichiers ou renommer le dossier parent. C'est toujours plus facile. – Jon

+0

Nous ne parlons pas de faire des changements au système de fichiers, c'est pour un but différent – FLX

+6

Piratage beaucoup ?? –

Répondre

1

Je veux fondamentalement mathématiquement tout ce qui contient * .torrent., Comment puis-je accomplir cela en regexp?

Vous pouvez utiliser:

[^/]*\.torrent/ 

En supposant que la dernière . était une faute de frappe.

+0

Merci! Je viens d'essayer cela dans http://www.gskinner.com/RegExr/ mais il ne fonctionne pas malheureusement :( – FLX

+0

@FLX, ça fonctionne très bien: http://regexr.com?309kb Remplacer le match avec une chaîne vide pour obtenir le résultat que vous recherchez (Notez que votre chemin collé a des caractères "cachés" qui gâchent les choses, au moins pour moi.) – Qtax

4

Vous pouvez le faire sans utiliser regexp:

>>> 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' 
+0

Merci mais je suis à la recherche d'une manière regex :) – FLX

11

Vous ne même pas besoin d'expressions régulières. Vous pouvez utiliser os.path.dirname et os.path.basename:

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

path est le chemin d'origine du fichier.

Vous pouvez également utiliser os.path.split comme suit:

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

Remarque Cela fonctionne sous l'hypothèse que ce que vous voulez supprimer est le nom du répertoire qui contient le fichier à partir du chemin comme dans l'exemple la question.

+1

+1 pour donner le meilleur (le plus robuste) pour résoudre le problème. –

1

Étant donné path='/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA.torrent/Big.Buck.Bunny.720p.Bluray.x264-BLA'

Vous pouvez le faire avec une expression régulière

re.sub("/[^/]*\.torrent/","",path) 

Vous pouvez aussi le faire sans regex comme

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

Votre question est un peu vague et peu claire, mais Voici une façon de dépouiller ce que vous voulez:

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 
Questions connexes