¿Cómo usar "/" (separador de directorios) en Linux y Windows en Python?


191

He escrito un código en Python que usa / para hacer un archivo en particular en una carpeta, si quiero usar el código en Windows no funcionará, ¿hay alguna manera de usar el código en Windows y Linux?

En python estoy usando este código:

pathfile=os.path.dirname(templateFile)
rootTree.write(''+pathfile+'/output/log.txt')

Cuando usaré mi código en una máquina Windows, mi código no funcionará.

¿Cómo uso "/" (separador de directorio) en Linux y Windows?


1
Puede definirlo al principio dependiendo de Win / * nix y luego trabajar con la variable.
Fedorqui 'SO deja de dañar'

12
En Windows puede usar \ o / como separador de directorio.
SecurityMatt

12
Windows admite /en rutas de directorio. ¿Qué problema específico tienes? Publique un código que ilustre el problema.
Michael Geary

A menos que dependa de los programas de espacio de usuario de Windows, la barra diagonal funciona tanto como hacia atrás. Sin embargo, algunos comandos de cmd tienen problemas con eso.
Pihhan

1
@Mehrdad: ¿Conoces un ejemplo para el cual la API Win32 no acepta '/'? (sin contar cmd.exe y otros programas)
Eryk Sun

Respuestas:


266

Uso os.path.join(). Ejemplo: os.path.join(pathfile,"output","log.txt").

En su código eso sería: rootTree.write(os.path.join(pathfile,"output","log.txt"))


8
os.path.joinusa una lógica más compleja para unir varios componentes de ruta relativa. Cuando solo quieres encadenarlos, os.sep.joines la elección correcta.
Bachsau

108

Utilizar:

import os
print os.sep

para ver cómo se ve el separador en un sistema operativo actual.
En su código puede usar:

import os
path = os.path.join('folder_name', 'file_name')


39

os.path.normpath(pathname)También debe mencionarse, ya que convierte los /separadores de ruta en \separadores en Windows. También se derrumba referencias redundantes de alta gama ... es decir, A/Be A/foo/../B, y A/./Btodos se convierten A/B. Y si eres Windows, todo esto se convierte A\B.


3
Esta es la mejor respuesta a la pregunta de IMO, ya que fue redactada, "cómo usar" / "(separador de directorio) en Linux y Windows". Y también es eminentemente útil: prefiero hacerlo os.path.normpath('a/b/c/d/file.ext')que os.path.join('a','b','c','d','file.ext')cuando necesito especificar un camino largo.
ukrutt

También encontré esta respuesta muy útil. Estaba buscando un método para generar rutas con un separador consistente. El famoso os.path.joinsimplemente se une a todo lo proporcionado. por ejemplo, join("a/b", "c\d")da a/b\c\d(en ventanas). Pero puedo obtener el resultado esperado con la combinación adecuada de joiny normpath, por ejemplo a\b\c\d(en Windows)
Sumudu

17

Si tiene la suerte de ejecutar Python 3.4+, puede usar pathlib:

from pathlib import Path

path = Path(dir, subdir, filename)  # returns a path of the system's path flavour

o equivalente,

path = Path(dir) / subdir / filename

16

Algunos enlaces útiles que te ayudarán:


2
sendero Generalmente útil, pero no aquí, IMO.
glglgl

2
@glglgl De hecho. Busqué seppero no pude resistirme a publicar esto también (asumí que el OP lo encontrará útil para el trabajo futuro) :)
Maroun


8

Puedes usar " os.sep "

 import os
 pathfile=os.path.dirname(templateFile)
 directory = str(pathfile)+os.sep+'output'+os.sep+'log.txt'
 rootTree.write(directory)

4

No construya los nombres de directorio y archivo usted mismo, use las bibliotecas incluidas de Python.

En este caso el relevante es os.path . Especialmente join, que crea un nuevo nombre de ruta a partir de un directorio y un nombre de archivo o directorio y divide que obtiene el nombre de archivo de una ruta completa.

Tu ejemplo sería

pathfile=os.path.dirname(templateFile)
p = os.path.join(pathfile, 'output')
p = os.path.join( p, 'log.txt')
rootTree.write(p)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.