Ik wil het directorypad van het huidige bestand krijgen.
Ik heb geprobeerd:
>>> os.path.abspath(__file__)
'C:\\python27\\test.py'
Maar hoe kan ik het pad van de map terugvinden?
Bijvoorbeeld:
'C:\\python27\\'
Antwoord 1, autoriteit 100%
De speciale variabele _bestand_bevat het pad naar het huidige bestand. Daaruit kunnen we de directory halen met behulp van Pathlibof de os.path-module.
Python 3
Voor de directory van het script dat wordt uitgevoerd:
import pathlib
pathlib.Path(__file__).parent.resolve()
Voor de huidige werkmap:
import pathlib
pathlib.Path().resolve()
Python 2 en 3
Voor de directory van het script dat wordt uitgevoerd:
import os
os.path.dirname(os.path.abspath(__file__))
Als je de huidige werkmap bedoelt:
import os
os.path.abspath(os.getcwd())
Merk op dat voor en na file
twee onderstrepingstekens staan, niet slechts één.
Houd er ook rekening mee dat als je interactief draait of code hebt geladen van iets anders dan een bestand (bijvoorbeeld: een database of online bron), __file__
mogelijk niet wordt ingesteld omdat er geen notie is van ” huidig bestand”. Het bovenstaande antwoord gaat uit van het meest voorkomende scenario van het uitvoeren van een python-script dat zich in een bestand bevindt.
Referenties
- pathlibin de python-documentatie.
- os.path – Python 2.7, os.path – Python 3
- os.getcwd – Python 2.7, os.getcwd – Python 3
- wat betekent/doet de variabele __file__?
Antwoord 2, autoriteit 6%
Het gebruik van Path
is de aanbevolen manier sinds Python 3:
from pathlib import Path
print("File Path:", Path(__file__).absolute())
print("Directory Path:", Path().absolute()) # Directory of current working directory, not __file__
Documentatie: pathlib
Opmerking: als u Jupyter Notebook gebruikt, retourneert __file__
de verwachte waarde niet, dus moet Path().absolute()
worden gebruikt.
Antwoord 3, autoriteit 3%
In Python 3.x doe ik:
from pathlib import Path
path = Path(__file__).parent.absolute()
Uitleg:
Path(__file__)
is het pad naar het huidige bestand..parent
geeft je de directorywaarin het bestand zich bevindt..absolute()
geeft je het volledige absolutepad ernaartoe.
Het gebruik van pathlib
is de moderne manier om met paden te werken. Als je het later om de een of andere reden als string nodig hebt, doe dan gewoon str(path)
.
Antwoord 4
import os
print os.path.dirname(__file__)
Antwoord 5
Probeer dit:
import os
dir_path = os.path.dirname(os.path.realpath(__file__))
Antwoord 6
IPython
heeft een magisch commando %pwd
om de huidige werkmap te krijgen. Het kan op de volgende manier worden gebruikt:
from IPython.terminal.embed import InteractiveShellEmbed
ip_shell = InteractiveShellEmbed()
present_working_directory = ip_shell.magic("%pwd")
Op IPython Jupyter Notebook %pwd
kan direct als volgt worden gebruikt:
present_working_directory = %pwd
Antwoord 7
NUTTIGE PADEIGENSCHAPPEN IN PYTHON:
from pathlib import Path
#Returns the path of the directory, where your script file is placed
mypath = Path().absolute()
print('Absolute path : {}'.format(mypath))
#if you want to go to any other file inside the subdirectories of the directory path got from above method
filePath = mypath/'data'/'fuel_econ.csv'
print('File path : {}'.format(filePath))
#To check if file present in that directory or Not
isfileExist = filePath.exists()
print('isfileExist : {}'.format(isfileExist))
#To check if the path is a directory or a File
isadirectory = filePath.is_dir()
print('isadirectory : {}'.format(isadirectory))
#To get the extension of the file
fileExtension = mypath/'data'/'fuel_econ.csv'
print('File extension : {}'.format(filePath.suffix))
OUTPUT:
ABSOLUTE PAD IS HET PAD WAAR UW PYTHON-BESTAND WORDT GEPLAATST
Absolute pad: D:\Study\Machine Learning\Jupitor Notebook\JupytorNotebookTest2\Udacity_Scripts\Matplotlib and seaborn Part2
Bestandspad: D:\Study\Machine Learning\Jupitor Notebook\JupytorNotebookTest2\Udacity_Scripts\Matplotlib and seaborn Part2\data\fuel_econ.csv
isfileExist : True
isadirectory : False
Bestandsextensie: .csv
Antwoord 8
Ik ontdekte dat de volgende opdrachten allemaal het volledige pad van de bovenliggende map van een Python 3.6-script teruggeven.
Python 3.6-script:
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
from pathlib import Path
#Get the absolute path of a Python3.6 script
dir1 = Path().resolve() #Make the path absolute, resolving any symlinks.
dir2 = Path().absolute() #See @RonKalian answer
dir3 = Path(__file__).parent.absolute() #See @Arminius answer
print(f'dir1={dir1}\ndir2={dir2}\ndir3={dir3}')
Verklarende links: .resolve() , .absolute(), Pad(bestand).parent().absolute()
Antwoord 9
U kunt de bibliotheek os
en os.path
eenvoudig als volgt gebruiken
import os
os.chdir(os.path.dirname(os.getcwd()))
os.path.dirname
retourneert de bovenste map van de huidige.
Het laat ons naar een hoger niveau gaan zonder een bestandsargument door te geven en zonder het absolute pad te kennen.
os.path.dirname(os.path.abspath(myfilename))
Antwoord 10
Om de migratieconsistentie tussen platforms (macOS/Windows/Linux) te behouden, probeert u:
path = r'%s' % os.getcwd().replace('\\','/')
Antwoord 11
Ik heb een functie gemaakt om te gebruiken bij het uitvoeren van python onder IIS in CGI om de huidige map te krijgen:
import os
def getLocalFolder():
path=str(os.path.dirname(os.path.abspath(__file__))).split('\\')
return path[len(path)-1]
Antwoord 12
## IMPORT MODULES
import os
## CALCULATE FILEPATH VARIABLE
filepath = os.path.abspath('') ## ~ os.getcwd()
## TEST TO MAKE SURE os.getcwd() is EQUIVALENT ALWAYS..
## ..OR DIFFERENT IN SOME CIRCUMSTANCES
Antwoord 13
Laten we aannemen dat u de volgende directorystructuur heeft: –
hoofd/
vouwen1
vouwen2
fold3…
folders = glob.glob("main/fold*")
for fold in folders:
abspath = os.path.dirname(os.path.abspath(fold))
fullpath = os.path.join(abspath, sch)
print(fullpath)
Antwoord 14
Als u alleen de huidige werkmap wilt zien
import os
print(os.getcwd())
Als u de huidige werkmap wilt wijzigen
os.chdir(path)
pad is een tekenreeks die het vereiste pad bevat dat moet worden verplaatst.
bijv.
path = "C:\\Users\\xyz\\Desktop\\move here"
Antwoord 15
Dit is wat ik moet doen
path = os.getcwd().replace(os.sep, "/")
name = Path(__file__).name
full = str(path) + "/" + str(name)
indv = full.split("/")
Antwoord 16
Systeem: MacOS
Versie: Python 3.6 met Anaconda
import os
rootpath = os.getcwd()
os.chdir(rootpath)