python - open - ¿Por qué usar os.path.join sobre concatenación de cadenas?
python open file (3)
Portátil
Escriba las manipulaciones de ruta de acceso una vez y funciona en muchas plataformas diferentes, de forma gratuita. El carácter delimitador se abstrae, facilitando su trabajo.
Inteligente
Ya no tiene que preocuparse si la ruta del directorio tiene una barra diagonal o no . os.path.join
lo agregará si es necesario.
Claro
El uso de os.path.join
hace que sea obvio para otras personas que leen tu código que estás trabajando con filepaths. Las personas pueden escanear rápidamente el código y descubrir que se trata de una ruta de archivo intrínsecamente. Si decides construirlo por ti mismo, es probable que desestimes al lector para que no encuentre problemas reales con tu código: "Hmm, algunas cuerdas concat, una sustitución. ¿Es esto una ruta de archivo o qué? ¡Gah! ¿Por qué no usó os.path.join
? " :)
No puedo ver el cuadro más grande aquí, creo; pero básicamente no tengo idea de por qué usaría os.path.join
lugar de solo la concatenación de cadenas normal.
He utilizado principalmente VBScript, por lo que no entiendo el punto de esta función.
Es independiente del sistema operativo. Si codifica sus rutas como C: / Lo que sea, solo funcionarán en Windows. Si los codifica con el estándar de Unix "/", solo funcionarán en Unix. os.path.join detecta el sistema operativo en el que se ejecuta y une las rutas con el símbolo correcto.
Funcionará en Windows con ''/' y Unix (incluido Mac OS X) con ''/''.
para posixpath aquí está el código sencillo
In [22]: os.path.join??
Type: function
String Form:<function join at 0x107c28ed8>
File: /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py
Definition: os.path.join(a, *p)
Source:
def join(a, *p):
"""Join two or more pathname components, inserting ''/'' as needed.
If any component is an absolute path, all previous path components
will be discarded."""
path = a
for b in p:
if b.startswith(''/''):
path = b
elif path == '''' or path.endswith(''/''):
path += b
else:
path += ''/'' + b
return path
no tiene ventanas pero lo mismo debería estar ahí con ''/'