it-swarm-pt.tech

Encontre o diretório atual e o diretório do arquivo

Em Python, quais comandos posso usar para encontrar:

  1. o diretório atual (onde eu estava no terminal quando executei o script Python) e
  2. onde o arquivo que estou executando é?
1802
John Howard

Para obter o caminho completo para o diretório em que um arquivo Python está contido, escreva isto no arquivo:

import os 
dir_path = os.path.dirname(os.path.realpath(__file__))

(Observe que o encantamento acima não funcionará se você já tiver usado os.chdir() para alterar seu diretório de trabalho atual, pois o valor da constante __file__ é relativo ao diretório de trabalho atual e não é alterado por uma chamada os.chdir().)


Para obter o diretório de trabalho atual, use

import os
cwd = os.getcwd()

Referências de documentação para os módulos, constantes e funções usadas acima:

2802
Russell Dias

Diretório de trabalho atual: os.getcwd()

E o atributo __file__ pode ajudá-lo a descobrir onde o arquivo que você está executando está localizado. Essa postagem SO explica tudo: Como obtenho o caminho do arquivo atual executado em Python?

295
Nix

Você pode achar isso útil como referência:

import os

print("Path at terminal when executing this file")
print(os.getcwd() + "\n")

print("This file path, relative to os.getcwd()")
print(__file__ + "\n")

print("This file full path (following symlinks)")
full_path = os.path.realpath(__file__)
print(full_path + "\n")

print("This file directory and name")
path, filename = os.path.split(full_path)
print(path + ' --> ' + filename + "\n")

print("This file directory only")
print(os.path.dirname(full_path))
247
Daniel Reis

1. Para obter o caminho completo do diretório atual

    >>import os
    >>print os.getcwd()

o/p: "C:\Users\admin\myfolder"

1. Para obter o nome da pasta do diretório atual sozinho

    >>import os
    >>str1=os.getcwd()
    >>str2=str1.split('\\')
    >>n=len(str2)
    >>print str2[n-1]

o/p: "myfolder"

54
vinithravit

pathlib module, introduced no Python 3.4 ( PEP 428 - O módulo pathlib - caminhos do sistema de arquivos orientados a objetos ), torna a experiência relacionada ao caminho muito melhor.

$ pwd
/home/skovorodkin/stack
$ tree
.
└── scripts
    ├── 1.py
    └── 2.py

Para obter o diretório de trabalho atual, use Path.cwd() :

from pathlib import Path

print(Path.cwd())  # /home/skovorodkin/stack

Para obter um caminho absoluto para seu arquivo de script, use Path.resolve() method:

print(Path(__file__).resolve())  # /home/skovorodkin/stack/scripts/1.py

E para obter o caminho de um diretório onde seu script está localizado, acesse .parent (recomenda-se chamar .resolve() antes de .parent):

print(Path(__file__).resolve().parent)  # /home/skovorodkin/stack/scripts

Lembre-se de que __file__ não é confiável em algumas situações: Como obtenho o caminho do arquivo atual executado em Python? .


Observe que Path.cwd(), Path.resolve() e outros métodos Path retornam objetos de caminho ( PosixPath no meu caso), e não strings. No Python 3.4 e 3.5 que causou alguma dor, porque open built-in função só poderia trabalhar com objetos string ou bytes, e não suporta Path objetos, então você teve que converter objetos Path para seqüências de caracteres ou usar Path.open() método, mas a última opção exigia que você alterasse o código antigo:

$ cat scripts/2.py
from pathlib import Path

p = Path(__file__).resolve()

with p.open() as f: pass
with open(str(p)) as f: pass
with open(p) as f: pass

print('OK')

$ python3.5 scripts/2.py
Traceback (most recent call last):
  File "scripts/2.py", line 11, in <module>
    with open(p) as f:
TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py')

Como você pode ver, open(p) não funciona com o Python 3.5.

PEP 519 - Adicionando um protocolo de caminho de sistema de arquivos , implementado em Python 3.6, adiciona suporte de PathLike objects a open function, então agora você pode passar objetos Path para a função open diretamente:

$ python3.6 scripts/2.py
OK
43
skovorodkin

Se você está tentando encontrar o diretório atual do arquivo em que você está atualmente:

SO maneira agnóstica:

dirname, filename = os.path.split(os.path.abspath(__file__))
37
Kurt

Se você estiver usando o Python 3.4, há o novo módulo pathlib de nível superior que permite chamar convenientemente pathlib.Path.cwd() para obter um objeto Path que representa seu diretório de trabalho atual, junto com muitos outros novos recursos.

Mais informações sobre esta nova API podem ser encontradas aqui .

29
Jazzer

Resposta para # 1:

Se você quiser o diretório atual, faça o seguinte:

import os
os.getcwd()

Se você quiser apenas um nome de pasta e tiver o caminho para essa pasta, faça o seguinte:

def get_folder_name(folder):
    '''
    Returns the folder name, given a full folder path
    '''
    return folder.split(os.sep)[-1]

Resposta para # 2:

import os
print os.path.abspath(__file__)
27
Blairg23

Um pouco atrasado para a festa, mas acho que a maneira mais sucinta de encontrar apenas o nome do seu contexto de execução atual seria

current_folder_path, current_folder_name = os.path.split(os.getcwd())
27
StormShadow

O Pathlib pode ser usado dessa maneira para obter o diretório contendo o script atual:

import pathlib
filepath = pathlib.Path(__file__).resolve().parent
17
Mathieu C.

Para obter o caminho completo do diretório atual:

os.path.realpath ('.')

17
Ilia S.

Se você estiver pesquisando a localização do script atualmente executado, poderá usar sys.argv[0] para obter o caminho completo.

16
Grochni

Para ver o diretório de trabalho atual, digite o seguinte script:

import os
current_working_directory = os.getcwd()
9
Mohammad Hassan

Para a pergunta 1 use os.getcwd() # get working dir e os.chdir(r'D:\Steam\steamapps\common') # set working dir


Eu recomendo usar sys.argv[0] para a pergunta 2 porque sys.argv é imutável e, portanto, sempre retorna o arquivo atual (caminho do objeto do módulo) e não é afetado pela os.chdir(). Além disso, você pode fazer assim:

import os
this_py_file = os.path.realpath(__file__)

# vvv Below comes your code vvv #

mas esse trecho e sys.argv[0] não funcionarão ou funcionarão quando forem compilados pelo PyInstaller porque as propriedades mágicas não estão definidas no nível __main__ e sys.argv[0] é a maneira como o seu exe foi chamado (significa que ele é afetado pelo diretório de trabalho).

7
Vladislav Toncharov

Para obter seu diretório de trabalho em python. Você pode usar o seguinte código:

import os
cwd = os.getcwd() #to get current working directory
print(cwd)
4
Nirali Khoda