Supongamos que el código de Python se ejecuta en un directorio de Windows anterior no conocido como 'main', y donde sea que se instale el código cuando se ejecuta, necesita acceder al directorio 'main / 2091 / data.txt'.
¿Cómo debo usar la función de abrir (ubicación)? ¿Cuál debería ser la ubicación?
Editar:
Descubrí que el siguiente código simple funcionará ... ¿tiene alguna desventaja?
file="\2091\sample.txt"
path=os.getcwd()+file
fp=open(path,'r+');
python
file
path
relative-path
Camelia
fuente
fuente
r"\2091\sample.txt"
. O escapar de ellos como"\\2091\\sample.txt"
(pero eso es molesto). Además, 2) está utilizando getcwd (), que es la ruta en la que se encontraba cuando ejecutaba el script. Pensé que querías en relación con la ubicación del script (pero ahora me pregunto). Y 3), siempre useos.path
funciones para manipular rutas. Su línea de unión de ruta debe seros.path.join(os.getcwd(), file)
4) la; no tiene sentidowith open(path, 'r+') as fp:
. Vea aquí la mejor explicación de laswith
declaraciones que he visto.os.path.abspath
de obtener fácilmente la ruta completa de la ruta relativa para abrir. la declaración final se ve así:os.path.abspath('./2091/sample.txt')
Respuestas:
Con este tipo de cosas, debe tener cuidado con su directorio de trabajo real. Por ejemplo, no puede ejecutar el script desde el directorio en el que se encuentra el archivo. En este caso, no puede usar una ruta relativa por sí mismo.
Si está seguro de que el archivo que desea está en un subdirectorio debajo de donde se encuentra realmente el script, puede usarlo
__file__
para ayudarlo aquí.__file__
es la ruta completa a donde se encuentra el script que está ejecutando.Entonces puedes jugar con algo como esto:
fuente
__file__
es una ruta relativa (al menos en mi configuración, por alguna razón), y debe llamaros.path.abspath(__file__)
primero. osx / homebrew 2.7NameError: name '__file__' is not defined
Este código funciona bien:
fuente
Creé una cuenta solo para poder aclarar una discrepancia que creo que encontré en la respuesta original de Russ.
Como referencia, su respuesta original fue:
Esta es una gran respuesta porque está tratando de crear dinámicamente una ruta absoluta del sistema al archivo deseado.
Cory Mawhorter notó que
__file__
es un camino relativo (también lo está en mi sistema) y sugirió usarloos.path.abspath(__file__)
.os.path.abspath
, sin embargo, devuelve la ruta absoluta de su script actual (es decir/path/to/dir/foobar.py
)Para usar este método (y cómo finalmente lo hice funcionar) debe eliminar el nombre del script al final de la ruta:
El abs_file_path resultante (en este ejemplo) se convierte en:
/path/to/dir/2091/data.txt
fuente
os.path.dirname(os.path.abspath(__file__))
os.path.dirname
funcionalidad usted mismo como lo hice en mi respuesta el año pasado.Depende de qué sistema operativo estés usando. Si desea una solución que sea compatible con Windows y * nix, algo como:
Debería funcionar bien.
El
path
módulo puede formatear una ruta para cualquier sistema operativo en el que se esté ejecutando. Además, python maneja las rutas relativas muy bien, siempre que tenga los permisos correctos.Editar :
Como mencionó kindall en los comentarios, python puede convertir entre rutas de estilo unix y ventanas de todos modos, por lo que incluso un código más simple funcionará:
Dicho esto, el
path
módulo todavía tiene algunas funciones útiles.fuente
relpath()
convierte un nombre de ruta en una ruta relativa. Como ya es un camino relativo, no hará nada.os.path
módulo que sería una mejor opción?__file__
. Por favor mira mi respuesta.Paso mucho tiempo descubriendo por qué mi código no pudo encontrar mi archivo que ejecuta Python 3 en el sistema Windows. Entonces agregué. antes / y todo funcionó bien:
fuente
file_path = os.path.join(script_dir, 'output03.txt')
script_dir = os.path.abspath(os.path.dirname(__file__))
Código:
Explicación:
Biblioteca de importación:
Use
__file__
para obtener la ruta actual del script:Separa la ruta del script en varios elementos:
Elimine el último elemento de la lista (el archivo de script real):
Agregue la ruta del archivo relativo:
Únase a los elementos de la lista y agregue el archivo de la ruta relativa:
Ahora está configurado para hacer lo que quiera con el archivo, como, por ejemplo:
fuente
path = "/".join(script_directory) + "/" + rel_path
usar el módulo os como enpath = os.path.join(script_directory, rel_path)
. En lugar de analizar manualmente la ruta que debería usarscript_path = os.path.dirname(__file__)
Prueba esto:
Python 3.4 introdujo una nueva biblioteca estándar para manejar archivos y rutas llamada pathlib. ¡Esto funciona para mi!
fuente
Si el archivo está en su carpeta principal, por ejemplo. follower.txt, simplemente puede usar
open('../follower.txt', 'r').read()
fuente
No estoy seguro si esto funciona en todas partes.
Estoy usando ipython en ubuntu.
Si desea leer el archivo en el subdirectorio de la carpeta actual:
su script está en la carpeta actual simplemente intente esto:
fuente
Python solo pasa el nombre de archivo que le das al sistema operativo, que lo abre. Si su sistema operativo admite rutas relativas como
main/2091/data.txt
(pista: lo hace), entonces eso funcionará bien.Puede encontrar que la forma más fácil de responder una pregunta como esta es probarla y ver qué sucede.
fuente
getcwd()
. Leí la descripción original como "en relación con el lugar donde ejecuto el script, independientemente de dónde se encuentre el código".fuente
Cuando era principiante, encontré estas descripciones un poco intimidantes. Como al principio lo intentaría
For Windows
y esto elevaría un
syntax error
. Solía confundirme mucho. Luego, después de navegar por google. Encontró por qué ocurrió el error. Escribiendo esto para principiantesEs porque para que la ruta se lea en Unicode, simplemente agrega un
\
al iniciar la ruta del archivoY ahora funciona solo agregue
\
antes de iniciar el directorio.fuente
\t
por ejemplo\top\directory
, que '\ t' se interpreta como un tabulador y tu 'truco' falla. La mejor opción es utilizar el formato de cadena sin formator'C:\Users\chidu\Desktop\Skipper New\Special_Note.txt'
que no intenta "escapar" de los caracteres.