(Python) Por que sempre preciso digitar caminhos absolutos nas funções de arquivo?
-
26-09-2019 - |
Pergunta
Por exemplo, se eu tiver:
C: 42 main.py
e
C: 42 info.txt
e eu quero ler info.txt de main.py, tenho que entrar "c: 42 info.txt" Instad de apenas "info.txt".
É para ser assim?
Caso contrário, como posso consertar isso?
Solução
Você pode especificar caminhos em relação a onde está o seu script. Eu faço isso o tempo todo ao escrever unittests.
Cada arquivo python tem um atributo especial - __file__
- que armazena o caminho para esse arquivo.
py_file= os.path.abspath(__file__) # path to main.py
py_dir = os.path.dirname(py_file) # path to the parent dir of main.py
txt_file = os.path.join(py_dir, 'info.txt') # path to info.txt
Outras dicas
É para ser assim. Os caminhos relativos são relativos ao diretório de trabalho atual do processo, não ao diretório em que seu script reside.
Em vez de codificá -lo, você pode encontrar o caminho do script usando sys.path[0]
, e também chdir
para ele ou usá -lo diretamente no nome do arquivo:
os.path.join(sys.path[0], 'info.txt')