os.path
— Vanliga manipuleringar av sökvägsnamn¶
Källkod: Lib/genericpath.py, Lib/posixpath.py (för POSIX) och Lib/ntpath.py (för Windows).
Den här modulen implementerar några användbara funktioner för sökvägsnamn. För att läsa eller skriva filer se open()
, och för åtkomst till filsystemet se os
-modulen. Sökvägsparametrarna kan skickas som strängar, bytes eller objekt som implementerar os.PathLike
-protokollet.
Till skillnad från ett Unix-shell gör Python inga automatiska sökvägsexpansioner. Funktioner som expanduser()
och expandvars()
kan anropas explicit när ett program önskar shell-liknande sökvägsexpansion. (Se även modulen glob
.)
Se även
Modulen pathlib
erbjuder sökvägsobjekt på hög nivå.
Anteckning
Alla dessa funktioner accepterar antingen bara bytes eller bara strängobjekt som sina parametrar. Resultatet är ett objekt av samma typ om en sökväg eller ett filnamn returneras.
Anteckning
Eftersom olika operativsystem har olika konventioner för sökvägsnamn finns det flera versioner av denna modul i standardbiblioteket. Modulen os.path
är alltid den sökvägsmodul som är lämplig för det operativsystem som Python körs på, och kan därför användas för lokala sökvägar. Men du kan också importera och använda de enskilda modulerna om du vill manipulera en sökväg som alltid är i ett av de olika formaten. De har alla samma gränssnitt:
posixpath
för sökvägar i UNIX-stilntpath
för sökvägar i Windows
Ändrad i version 3.8: exists()
, lexists()
, isdir()
, isfile()
, islink()
och ismount()
returnerar nu False
istället för att skapa ett undantag för sökvägar som innehåller tecken eller byte som inte kan representeras på OS-nivå.
- os.path.abspath(path)¶
Returnerar en normaliserad absolutiserad version av sökvägsnamnet path. På de flesta plattformar är detta likvärdigt med att anropa funktionen
normpath()
enligt följande:normpath(join(os.getcwd(), path))
.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.basename(path, /)¶
Returnerar basnamnet för sökvägsnamnet sökväg. Detta är det andra elementet i det par som returneras genom att skicka path till funktionen
split()
. Observera att resultatet av denna funktion skiljer sig från Unix basename-program; där basename för'/foo/bar/'
returnerar'bar'
, returnerarbasename()
-funktionen en tom sträng (''
).Ändrad i version 3.6: Accepterar en path-like object.
- os.path.commonpath(paths)¶
Returnerar den längsta gemensamma undersökvägen för varje sökväg i iterationen paths. Utlöser
ValueError
om paths innehåller både absoluta och relativa sökvägar, om paths finns på olika enheter eller om paths är tom. Till skillnad fråncommonprefix()
returnerar detta en giltig sökväg.Tillagd i version 3.5.
Ändrad i version 3.6: Accepterar en sekvens av path-liknande objekt.
Ändrad i version 3.13: Alla iterabler kan nu skickas, i stället för bara sekvenser.
- os.path.commonprefix(list, /)¶
Returnerar det längsta sökvägsprefixet (taget tecken för tecken) som är ett prefix för alla sökvägar i list. Om list är tom returneras den tomma strängen (
''
).Anteckning
Denna funktion kan returnera ogiltiga sökvägar eftersom den arbetar med ett tecken i taget. För att få en giltig sökväg, se
commonpath()
.>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib']) '/usr/l' >>> os.path.commonpath(['/usr/lib', '/usr/local/lib']) '/usr'
Ändrad i version 3.6: Accepterar en path-like object.
- os.path.dirname(path, /)¶
Returnerar katalognamnet för sökvägsnamnet sökväg. Detta är det första elementet i det par som returneras när path skickas till funktionen
split()
.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.exists(path)¶
Returnerar
True
om path hänvisar till en befintlig sökväg eller en öppen filbeskrivare. ReturnerarFalse
för brutna symboliska länkar. På vissa plattformar kan denna funktion returneraFalse
om tillstånd inte ges för att köraos.stat()
på den begärda filen, även om sökvägen fysiskt existerar.Ändrad i version 3.3: path kan nu vara ett heltal:
True
returneras om det är en öppen filbeskrivare,False
annars.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.lexists(path)¶
Returnerar
True
om path refererar till en befintlig sökväg, inklusive brutna symboliska länkar. Motsvararexists()
på plattformar som saknaros.lstat()
.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.expanduser(path)¶
På Unix och Windows returneras argumentet med en initial komponent av
~
eller~user
ersatt av den användarens hemkatalog.På Unix ersätts en initial
~
av miljövariabelnHOME
om den är inställd; annars söks den aktuella användarens hemkatalog upp i lösenordskatalogen genom den inbyggda modulenpwd
. En första~``användare
söks upp direkt i lösenordskatalogen.I Windows kommer
USERPROFILE
att användas om den är angiven, annars kommer en kombination avHOMEPATH
ochHOMEDRIVE
att användas. En första~user
hanteras genom att kontrollera att den sista katalogkomponenten i den aktuella användarens hemkatalog matcharUSERNAME
, och ersätta den om så är fallet.Om expansionen misslyckas eller om sökvägen inte börjar med en tilde, returneras sökvägen oförändrad.
Ändrad i version 3.6: Accepterar en path-like object.
Ändrad i version 3.8: Använder inte längre
HOME
på Windows.
- os.path.expandvars(path)¶
Returnerar argumentet med miljövariablerna expanderade. Substrängar av formen
$name
eller${name}
ersätts av värdet på miljövariabeln name. Missbildade variabelnamn och referenser till icke-existerande variabler lämnas oförändrade.I Windows stöds
%name%
-expansioner utöver$name
och${name}
.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.getatime(path, /)¶
Returnerar tiden för senaste åtkomst till sökväg. Returvärdet är ett flyttal som anger antalet sekunder sedan epoken (se modulen
time
). GerOSError
om filen inte finns eller är otillgänglig.
- os.path.getmtime(path, /)¶
Returnerar tidpunkten för den senaste ändringen av sökväg. Returvärdet är ett flyttal som anger antalet sekunder sedan epoken (se modulen
time
). UtlöserOSError
om filen inte finns eller är otillgänglig.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.getctime(path, /)¶
Returnerar systemets ctime, som på vissa system (t.ex. Unix) är tidpunkten för den senaste metadataförändringen och på andra (t.ex. Windows) är skapelsetiden för path. Returvärdet är ett tal som anger antalet sekunder sedan epoken (se modulen
time
). UtlöserOSError
om filen inte finns eller är otillgänglig.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.getsize(path, /)¶
Returnerar storleken, i byte, på path. Ger
OSError
om filen inte finns eller är otillgänglig.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.isabs(path, /)¶
Returnerar
True
om path är ett absolut sökvägsnamn. På Unix betyder det att det börjar med ett snedstreck, på Windows att det börjar med två (bak)snedstreck, eller en enhetsbokstav, kolon och (bak)snedstreck tillsammans.Ändrad i version 3.6: Accepterar en path-like object.
Ändrad i version 3.13: I Windows returneras
False
om den angivna sökvägen börjar med exakt ett (bak)snedstreck.
- os.path.isfile(path)¶
Returnerar
True
om sökväg är enexisterande
vanlig fil. Detta följer symboliska länkar, så bådeislink()
ochisfile()
kan vara true för samma sökväg.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.isdir(path, /)¶
Returnerar
True
om sökväg är enexisterande
katalog. Detta följer symboliska länkar, så bådeislink()
ochisdir()
kan vara true för samma sökväg.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.isjunction(path)¶
Returnerar
True
om path hänvisar till enexisterande
katalogpost som är en korsning. Returnerar alltidFalse
om junctions inte stöds på den aktuella plattformen.Tillagd i version 3.12.
- os.path.islink(path)¶
Returnerar
True
om path refererar till enexisterande
katalogpost som är en symbolisk länk. AlltidFalse
om symboliska länkar inte stöds av Pythons runtime.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.ismount(path)¶
Returnerar
True
om sökvägsnamnet sökväg är en mount point: en punkt i ett filsystem där ett annat filsystem har monterats. På POSIX kontrollerar funktionen om sökväg*s förälder, :file:`{path}/..`, finns på en annan enhet än *sökväg, eller ompath/..
och sökväg pekar på samma i-nod på samma enhet — detta bör upptäcka monteringspunkter för alla Unix- och POSIX-varianter. Den kan inte på ett tillförlitligt sätt upptäcka bindningar på samma filsystem. På Linux-system returnerar den alltidTrue
för btrfs-undervolymer, även om de inte är monteringspunkter. På Windows är en enhetsbeteckning root och en delning UNC alltid monteringspunkter, och för alla andra sökvägar anropasGetVolumePathName
för att se om den skiljer sig från inmatningssökvägen.Ändrad i version 3.4: Stöd för att upptäcka monteringspunkter som inte är root i Windows har lagts till.
Ändrad i version 3.6: Accepterar en path-like object.
- os.path.isdevdrive(path)¶
Returnerar
True
om sökvägsnamnet path finns på en Windows Dev Drive. En Dev Drive är optimerad för utvecklarscenarier och erbjuder snabbare prestanda för att läsa och skriva filer. Den rekommenderas för användning av källkod, tillfälliga byggkataloger, paketcacher och andra IO-intensiva operationer.Kan ge upphov till ett fel om sökvägen är ogiltig, t.ex. om den saknar en identifierbar enhet, men returnerar
False
på plattformar som inte stöder Dev-enheter. Se Windows-dokumentationen för information om hur du aktiverar och skapar Dev-enheter.Tillagd i version 3.12.
Ändrad i version 3.13: Funktionen är nu tillgänglig på alla plattformar och kommer alltid att returnera
False
på de plattformar som inte har stöd för Dev Drives
- os.path.isreserved(path)¶
Returnerar
True
om path är ett reserverat sökvägsnamn på det aktuella systemet.I Windows inkluderar reserverade filnamn sådana som slutar med ett mellanslag eller en punkt, sådana som innehåller kolon (t.ex. filströmmar som ”name:stream”), jokertecken (t.ex.
'*?"<>'
), pipe eller ASCII-kontrolltecken, samt DOS-enhetsnamn som ”NUL”, ”CON”, ”CONIN$”, ”CONOUT$”, ”AUX”, ”PRN”, ”COM1” och ”LPT1”.Anteckning
Denna funktion approximerar regler för reserverade sökvägar på de flesta Windows-system. Dessa regler ändras över tid i olika Windows-versioner. Den här funktionen kan komma att uppdateras i framtida Python-utgåvor när ändringar av reglerna blir allmänt tillgängliga.
Tillgänglighet: Windows.
Tillagd i version 3.13.
- os.path.join(path, /, *paths)¶
Sammanfoga ett eller flera sökvägssegment på ett intelligent sätt. Returvärdet är sammankopplingen av path och alla medlemmar av *paths, med exakt en katalogseparator efter varje icke-tom del, utom den sista. Det vill säga att resultatet bara slutar med en separator om den sista delen antingen är tom eller slutar med en separator. Om ett segment är en absolut sökväg (vilket i Windows kräver både en enhet och en rot) ignoreras alla tidigare segment och sammanfogningen fortsätter från det absoluta sökvägssegmentet.
I Windows återställs inte enheten när ett rotat sökvägssegment (t.ex.
r'\foo'
) påträffas. Om ett segment ligger på en annan enhet eller är en absolut sökväg ignoreras alla tidigare segment och enheten återställs. Observera att eftersom det finns en aktuell katalog för varje enhet, representeraros.path.join("c:", "foo")
en sökväg relativt till den aktuella katalogen på enhetenC:
(c:foo
), intec:\foo
.Ändrad i version 3.6: Accepterar en path-like object för path och paths.
- os.path.normcase(path, /)¶
Normalisera versalerna i ett sökvägsnamn. I Windows konverterar du alla tecken i sökvägsnamnet till gemener och konverterar även snedstreck framåt till snedstreck bakåt. På andra operativsystem returneras sökvägen oförändrad.
Ändrad i version 3.6: Accepterar en path-like object.
- os.path.normpath(path)¶
Normalisera ett sökvägsnamn genom att kollapsa överflödiga separatorer och referenser på högre nivåer så att
A//B
,A/B/
,A/./B
ochA/foo/../B
alla blirA/B
. Denna strängmanipulation kan ändra betydelsen av en sökväg som innehåller symboliska länkar. I Windows konverteras snedstreck framåt till snedstreck bakåt. Användnormcase()
om du vill normalisera teckenföljden.Anteckning
På POSIX-system, i enlighet med IEEE Std 1003.1 2013 Edition; 4.13 Pathname Resolution, om ett sökvägsnamn börjar med exakt två snedstreck, kan den första komponenten efter de inledande tecknen tolkas på ett implementationsdefinierat sätt, även om mer än två inledande tecken ska behandlas som ett enda tecken.
Ändrad i version 3.6: Accepterar en path-like object.
- os.path.realpath(path, /, *, strict=False)¶
Returnerar den kanoniska sökvägen för det angivna filnamnet och eliminerar eventuella symboliska länkar som påträffas i sökvägen (om de stöds av operativsystemet). I Windows löser denna funktion även namn i MS-DOS (även kallat 8.3) stil, t.ex.
C:\\PROGRA~1
tillC:\\Program Files
.Som standard utvärderas sökvägen fram till den första komponent som inte finns, som är en symlänk-loop eller vars utvärdering ger upphov till
OSError
. Alla sådana komponenter läggs till oförändrade till den befintliga delen av sökvägen.Några fel som hanteras på det här sättet är ”åtkomst nekad”, ”inte en katalog” eller ”dåligt argument till intern funktion”. Den resulterande sökvägen kan alltså saknas eller vara otillgänglig, kan fortfarande innehålla länkar eller loopar och kan korsa icke-kataloger.
Detta beteende kan ändras med hjälp av nyckelordsargument:
Om strict är
True
, kommer det första felet som uppstår när sökvägen utvärderas att visas igen. I synnerhetFileNotFoundError
om sökväg inte finns, eller ett annatOSError
om den på annat sätt är otillgänglig.Om strict är
os.path.ALLOW_MISSING
, kommer andra fel änFileNotFoundError
att visas igen (som medstrict=True
). Den returnerade sökvägen kommer alltså inte att innehålla några symboliska länkar, men den namngivna filen och några av dess överordnade kataloger kan saknas.Anteckning
Den här funktionen emulerar operativsystemets procedur för att göra en sökväg kanonisk, som skiljer sig något mellan Windows och UNIX när det gäller hur länkar och efterföljande sökvägskomponenter interagerar.
Operativsystemets API:er gör sökvägar kanoniska efter behov, så det är normalt inte nödvändigt att anropa den här funktionen.
Ändrad i version 3.6: Accepterar en path-like object.
Ändrad i version 3.8: Symboliska länkar och korsningar löses nu i Windows.
Ändrad i version 3.10: Parametern strict lades till.
Ändrad i version 3.14: Värdet
ALLOW_MISSING
för parametern strict har lagts till.
- os.path.ALLOW_MISSING¶
Specialvärde som används för strict-argumentet i
realpath()
.Tillagd i version 3.14.
- os.path.relpath(path, start=os.curdir)¶
Returnerar en relativ filväg till väg antingen från den aktuella katalogen eller från en valfri start-katalog. Detta är en sökvägsberäkning: filsystemet används inte för att bekräfta existensen av eller typen av sökväg eller start. I Windows genereras
ValueError
när sökväg och start finns på olika enheter.start är standardvärdet för
os.curdir
.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.samefile(path1, path2, /)¶
Returnerar
True
om båda sökvägsargumenten hänvisar till samma fil eller katalog. Detta bestäms av enhetsnumret och i-nod-numret och ger upphov till ett undantag om ettos.stat()
-anrop på något av sökvägsnamnen misslyckas.Ändrad i version 3.2: Stöd för Windows har lagts till.
Ändrad i version 3.4: Windows använder nu samma implementering som alla andra plattformar.
Ändrad i version 3.6: Accepterar en path-like object.
- os.path.sameopenfile(fp1, fp2)¶
Returnerar
True
om filbeskrivarna fp1 och fp2 hänvisar till samma fil.Ändrad i version 3.2: Stöd för Windows har lagts till.
Ändrad i version 3.6: Accepterar en path-like object.
- os.path.samestat(stat1, stat2, /)¶
Returnerar
True
om stat-tuplerna stat1 och stat2 refererar till samma fil. Dessa strukturer kan ha returnerats avos.fstat()
,os.lstat()
, elleros.stat()
. Denna funktion implementerar den underliggande jämförelse som används avsamefile()
ochsameopenfile()
.Ändrad i version 3.4: Stöd för Windows har lagts till.
- os.path.split(path, /)¶
Dela upp sökvägsnamnet sökväg i ett par,
(huvud, svans)
där svans är den sista sökvägskomponenten och huvud är allt som leder fram till den. tail-delen kommer aldrig att innehålla ett snedstreck; om path slutar med ett snedstreck kommer tail att vara tomt. Om det inte finns något snedstreck i path kommer head att vara tom. Om sökväg är tom, är både huvud och svans tomma. Efterföljande snedstreck tas bort från head om det inte är roten (endast ett eller flera snedstreck). I samtliga fall returnerarjoin(head, tail)
en sökväg till samma plats som path (men strängarna kan skilja sig åt). Se även funktionernadirname()
ochbasename()
.Ändrad i version 3.6: Accepterar en path-like object.
- os.path.splitdrive(path, /)¶
Dela upp sökvägsnamnet path i ett par
(drive, tail)
där drive antingen är en monteringspunkt eller den tomma strängen. På system som inte använder enhetsspecifikationer kommer drive alltid att vara den tomma strängen. I samtliga fall kommerdrive + tail
att vara samma sak som path.I Windows delas ett söknamn upp i enhet/UNC sharepoint och relativ sökväg.
Om sökvägen innehåller en enhetsbeteckning kommer enheten att innehålla allt till och med kolon:
>>> splitdrive("c:/dir") ("c:", "/dir")
Om sökvägen innehåller en UNC-sökväg kommer enheten att innehålla värdnamnet och share:
>>> splitdrive("//host/computer/dir") ("//host/computer", "/dir")
Ändrad i version 3.6: Accepterar en path-like object.
- os.path.splitroot(path, /)¶
Dela upp sökvägsnamnet path i en tupel med 3 objekt
(drive, root, tail)
där drive är ett enhetsnamn eller en monteringspunkt, root är en sträng med separatorer efter enheten och tail är allt efter roten. Vilken som helst av dessa poster kan vara den tomma strängen. I samtliga fall kommerdrive + root + tail
att vara samma sak som path.På POSIX-system är drive alltid tomt. root kan vara tomt (om path är relativ), ett enda snedstreck (om path är absolut) eller två snedstreck (implementationsdefinierat enligt IEEE Std 1003.1-2017; 4.13 Pathname Resolution.) Till exempel:
>>> splitroot('/home/sam') ('', '/', 'home/sam') >>> splitroot('//home/sam') ('', '//', 'home/sam') >>> splitroot('///home/sam') ('', '/', '//home/sam')
I Windows kan drive vara tomt, en enhets bokstavsnamn, en UNC-delning eller ett enhetsnamn. root kan vara tomt, ett snedstreck framåt eller ett snedstreck bakåt. Till exempel:
>>> splitroot('C:/Users/Sam') ('C:', '/', 'Users/Sam') >>> splitroot('//Server/Share/Users/Sam') ('//Server/Share', '/', 'Users/Sam')
Tillagd i version 3.12.
- os.path.splitext(path, /)¶
Dela upp sökvägsnamnet sökväg i ett par
(rot, ext)
så attrot + ext == sökväg
, och tillägget, ext, är tomt eller börjar med en punkt och innehåller högst en punkt.Om sökvägen inte innehåller något tillägg kommer ext att vara
''
:>>> splitext('bar') ('bar', '')
Om sökvägen innehåller en förlängning, kommer ext att sättas till denna förlängning, inklusive den inledande punkten. Observera att tidigare perioder ignoreras:
>>> splitext('foo.bar.exe') ('foo.bar', '.exe') >>> splitext('/foo/bar.exe') ('/foo/bar', '.exe')
Ledande perioder av den sista komponenten i sökvägen anses vara en del av roten:
>>> splitext('.cshrc') ('.cshrc', '') >>> splitext('/foo/....jpg') ('/foo/....jpg', '')
Ändrad i version 3.6: Accepterar en path-like object.
- os.path.supports_unicode_filenames¶
True
om godtyckliga Unicode-strängar kan användas som filnamn (inom de begränsningar som gäller för filsystemet).