Obtenez de nom de fichier (sans extension et répertoire) à partir du chemin d'accès au fichier

Ce que j'ai:

import os
import ntpath

def fetch_name(filepath):
    return os.path.splitext(ntpath.basename(filepath))[0]

a = u'E:\That is some string over here\news_20.03_07.30_10 .m2t'
b = u'E:\And here is some string too\Logo_TimeBuffer.m2t.mpg'

fetch_name(a)
>>u'That is some string over here\news_20.03_07.30_10 ' # wrong!
fetch_name(b)
>>u'Logo_TimeBuffer.m2t' # wrong!

Ce dont j'ai besoin:

fetch_name(a)
>>u'news_20.03_07.30_10 '
fetch_name(b)
>>u'Logo_TimeBuffer'
  • Utiliser des chaînes de caractères pour les noms de fichiers Windows, comme les barres obliques inverses peuvent être convertis en d'autres choses...; que dans la r'E:\That est une chaîne de caractères ici\news_20.03_07.30_10 .m2t'
  • En fait je ne peux pas. Les cordes sont en Unicode tableau
  • Exactement comment voulez-vous faire la différence entre un fichier d'extension et de normal .? Voulez-vous traiter tous les trois caractères de suffixes délimité par . comme des extensions?
  • bien exactement, je n'ai pas besoin de faire la différence entre elle. Une bibliothèque doit faire ce travail pour moi -)
  • Ce que je veux dire, comment est une bibliothèque censé dire à votre intention? Pourquoi est - 30_10 pas raisonnable d'extension de fichier? Aucune bibliothèque ne va lire dans votre esprit si vous lui donnez des conseils sur ce que vous considérez être une extension et ce que vous estimez être juste des points, suivie par des lettres.
  • yep, je l'obtiens. C'est sur le fixe et officiellement connu une extension de noms, je suppose. Par exemple .m2t.mpg est certainement extension, .bla.mpg est certainement pas.
  • Votre code fonctionne exactement comme il se doit. Dans un exemple, le \n n'est pas traité comme un caractère barre oblique inverse parce que c'est un caractère de saut de ligne. Dans l'exemple b, l'extension est .mpg, ce qui est bien effacé. Un fichier ne peut jamais avoir plus d'une extension, ou une extension comprenant une période.
  • Alors que vous avez déjà votre solution. 🙂 Il suffit de télécharger ou de créer une liste des extensions que vous considérez officiel, et de supprimer toutes les suffixe hors de votre nom de fichier qui est à l'intérieur de cette liste. En passant, je vais écrire un programme de demain qui utilise .bla.mpg comme une extension. 😛
  • bon, on dirait que je reçois tous les clairement la situation. Maintenant, pouvez-vous s'il vous plaît poster ces deux derniers commentaires comme réponses? Je veux vous donner deux mecs rep pour votre effort et à la fin de la question. 🙂

InformationsquelleAutor Bruno Gelb | 2014-04-22