Extrahera filnamn från sökvägen, oavsett formatet os/path
Vilket Python-bibliotek kan jag använda för att extrahera filnamn från sökvägar, oavsett operativsystem eller sökvägsformat?
Jag vill till exempel att alla dessa sökvägar ska ge mig c
:
a/b/c/
a/b/c
\a\b\c
\a\b\c\
a\b\c
a/b/../../a/b/c/
a/b/../../a/b/c
680
3
Att använda
os.path.split
elleros.path.basename
som andra föreslår fungerar inte i alla fall: om du kör skriptet på Linux och försöker bearbeta en klassisk sökväg i Windows-stil kommer det att misslyckas.Windows-stigar kan använda antingen backslash eller forward slash som stigseparator. Därför kommer modulen
ntpath
(som motsvarar os.path när den körs på Windows) att fungera för alla(1) sökvägar på alla plattformar.Om filen slutar med ett snedstreck kommer naturligtvis basnamnet att vara tomt, så gör en egen funktion för att hantera det:
Verifiering:
(1) Det finns ett förbehåll: Linux filnamn kan innehålla backslashes. Så på Linux hänvisar
r'a/b\c'
alltid till filenb\c
i mappena
, medan det på Windows alltid hänvisar till filenc
i undermappenb
i mappena
. Så när både framåt- och bakåtriktade snedstreck används i en sökväg måste du känna till den tillhörande plattformen för att kunna tolka den korrekt. I praktiken är det oftast säkert att anta att det är en Windows-sökväg eftersom backslashes sällan används i Linux-filnamn, men tänk på detta när du kodar så att du inte skapar oavsiktliga säkerhetshål.os.path.split är den funktion du söker
Anta att p är inmatningssträngen, tail är vad du vill ha.
Se python os module docs för detaljer.