¿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.