Hoe krijg ik het volledige pad van de huidige bestandsmap?

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 filetwee 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

  1. pathlibin de python-documentatie.
  2. os.path – Python 2.7, os.path – Python 3
  3. os.getcwd – Python 2.7, os.getcwd – Python 3
  4. wat betekent/doet de variabele __file__?

Antwoord 2, autoriteit 6%

Het gebruik van Pathis 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.
  • .parentgeeft je de directorywaarin het bestand zich bevindt.
  • .absolute()geeft je het volledige absolutepad ernaartoe.

Het gebruik van pathlibis 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

IPythonheeft een magisch commando %pwdom 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 %pwdkan 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 osen os.patheenvoudig als volgt gebruiken

import os
os.chdir(os.path.dirname(os.getcwd()))

os.path.dirnameretourneert 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)

Other episodes