python - una - Buscar directorio actual y directorio de archivos
recorrer directorios en python (15)
Esta pregunta ya tiene una respuesta aquí:
En Python, ¿qué comandos puedo usar para encontrar:
- el directorio actual (donde estaba en el terminal cuando ejecuté el script de Python), y
- ¿Dónde está el archivo que estoy ejecutando?
1.Para obtener la ruta completa del directorio actual
>>import os
>>print os.getcwd()
o / p: "C: / Users / admin / myfolder"
1. Para obtener el nombre de la carpeta del directorio actual solo
>>import os
>>str1=os.getcwd()
>>str2=str1.split(''//')
>>n=len(str2)
>>print str2[n-1]
o / p: "mi carpeta"
Directorio de trabajo actual: os.getcwd()
Y el atributo __file__ puede ayudarlo a averiguar dónde se encuentra el archivo que está ejecutando. Esta publicación SO lo explica todo: ¿Cómo obtengo la ruta del archivo ejecutado actual en Python?
Para la pregunta 1, use os.getcwd() # get working dir
y os.chdir(r''D:/Steam/steamapps/common'') # set working dir
Recomiendo usar sys.argv[0]
para la pregunta 2 porque sys.argv
es inmutable y, por lo tanto, siempre devuelve el archivo actual (ruta del objeto del módulo) y no está afectado por os.chdir()
. También puedes hacer así:
import os
this_py_file = os.path.realpath(__file__)
# vvv Below comes your code vvv #
pero ese fragmento de sys.argv[0]
y sys.argv[0]
no funcionarán o funcionarán de forma extraña cuando lo compile PyInstaller porque las propiedades mágicas no están establecidas en el nivel sys.argv[0]
y sys.argv[0]
es la forma en que se llamó a su exe (significa que se ve afectado por el directorio de trabajo).
Para obtener la ruta completa al directorio en el que se encuentra un archivo Python, escriba esto en ese archivo:
import os
dir_path = os.path.dirname(os.path.realpath(__file__))
(Tenga en cuenta que el encantamiento anterior no funcionará si ya ha usado os.chdir()
para cambiar su directorio de trabajo actual, ya que el valor de la constante __file__
es relativo al directorio de trabajo actual y no es cambiado por un sistema os.chdir()
llamada.
Para obtener el uso actual del directorio de trabajo.
import os
cwd = os.getcwd()
Referencias de documentación para los módulos, constantes y funciones utilizadas anteriormente:
- Los módulos
os
yos.path
. - La constante
__file__
-
os.path.realpath(path)
(devuelve "la ruta canónica del nombre de archivo especificado, eliminando cualquier enlace simbólico encontrado en la ruta" ) -
os.path.dirname(path)
(devuelve "el nombre de directorio de la ruta de acceso" ) -
os.getcwd()
(devuelve "una cadena que representa el directorio de trabajo actual" ) -
os.chdir(path)
( "cambiar el directorio de trabajo actual a lapath
" )
Para obtener la ruta completa del directorio actual:
os.path.realpath (''.'')
Para obtener su directorio de trabajo en python. Puedes usar el siguiente código:
importar os cwd = os.getcwd () #para obtener el directorio de trabajo
Para ver el tipo de directorio de trabajo actual siguiente script:
import os
current_working_directory = os.getcwd()
Pathlib se puede usar de esta manera para obtener el directorio que contiene el script actual:
import pathlib
filepath = pathlib.Path(__file__).resolve().parent
Puede encontrar esto útil como referencia:
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))
Si está buscando la ubicación del script ejecutado actualmente, puede usar sys.argv[0]
para obtener la ruta completa.
Si está intentando encontrar el directorio actual del archivo en el que se encuentra actualmente:
De manera agnóstica del sistema operativo:
dirname, filename = os.path.split(os.path.abspath(__file__))
Si está utilizando Python 3.4, existe un nuevo módulo de pathlib
nivel pathlib
que le permite llamar a pathlib.Path.cwd()
para obtener un objeto de Path
que represente su directorio de trabajo actual, junto con muchas otras características nuevas.
Más información sobre esta nueva API se puede encontrar here .
Un poco tarde para la fiesta, pero creo que la forma más breve de encontrar el nombre de su contexto de ejecución actual sería
current_folder_path, current_folder_name = os.path.split(os.getcwd())
pathlib
módulo pathlib
, introduced en Python 3.4 ( PEP 428 - El módulo pathlib - rutas del sistema de archivos orientado a objetos ), hace que la experiencia relacionada con la ruta sea mucho mejor.
$ pwd
/home/skovorodkin/stack
$ tree
.
└── scripts
├── 1.py
└── 2.py
Para obtener el directorio de trabajo actual use Path.cwd()
:
from pathlib import Path
print(Path.cwd()) # /home/skovorodkin/stack
Para obtener una ruta de acceso absoluta a su archivo de script, utilice el método Path.resolve()
:
print(Path(__file__).resolve()) # /home/skovorodkin/stack/scripts/1.py
Y para obtener la ruta de un directorio donde se encuentra su script, acceda a .parent
(se recomienda llamar a .resolve()
antes de .parent
):
print(Path(__file__).resolve().parent) # /home/skovorodkin/stack/scripts
Recuerde que __file__
no es confiable en algunas situaciones: ¿Cómo obtengo la ruta del archivo ejecutado actual en Python? .
Tenga en cuenta que Path.cwd()
, Path.resolve()
y otros métodos de ruta devuelven objetos de ruta ( PosixPath
en mi caso), no cadenas. En Python 3.4 y 3.5 eso causó cierto dolor, porque la función incorporada open
solo podía funcionar con objetos de cadena o bytes, y no era compatible con objetos de Path
, por lo que tenía que convertir objetos de Path
en cadenas o usar el método Path.open()
. pero la última opción requería que cambies el código antiguo:
$ 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 puede ver, open(p)
no funciona con Python 3.5.
PEP 519: agregar un protocolo de ruta de acceso al sistema de archivos , implementado en Python 3.6, agrega soporte de objetos PathLike
para open
función, por lo que ahora puede pasar la Path
objetos para open
función directamente:
$ python3.6 scripts/2.py
OK
Respuesta al # 1:
Si quieres el directorio actual, haz esto:
import os
os.getcwd()
Si desea cualquier nombre de carpeta y tiene la ruta de acceso a esa carpeta, haga lo siguiente:
def get_folder_name(folder):
''''''
Returns the folder name, given a full folder path
''''''
return folder.split(os.sep)[-1]
Respuesta al # 2:
import os
print os.path.abspath(__file__)