2011-09-05 9 views
8

Tengo archivos que solo deseo que 'foo' y 'bar' salgan de la división.Dividir nombres de archivo con python

dn = "C:\\X\\Data\\" 

archivos

f= C:\\X\\Data\\foo.txt 
f= C:\\X\\Dats\\bar.txt 

He tratado f.split(".",1)[0]

pensé desde dn y .txt son pre-definido que podría restar, pues no. Split no funciona para mí.

Respuesta

26

¿Qué le parece usar los métodos adecuados de manejo de caminos de os.path?

>>> f = 'C:\\X\\Data\\foo.txt' 
>>> import os 
>>> os.path.basename(f) 
'foo.txt' 
>>> os.path.dirname(f) 
'C:\\X\\Data' 
>>> os.path.splitext(f) 
('C:\\X\\Data\\foo', '.txt') 
>>> os.path.splitext(os.path.basename(f)) 
('foo', '.txt') 
+0

Más accuratly, 'os.path'. – Keith

+2

Más correctamente y con precisión. – Martlark

1

Estas dos líneas de devolver una lista de nombres de archivos sin extensiones:

import os 
[fname.rsplit('.', 1)[0] for fname in os.listdir("C:\\X\\Data\\")] 

Parece que ha dejado fuera algo de código. Por lo que puedo decir, estás tratando de dividir el contenido del archivo.

Para solucionar su problema, necesita operar en una lista de los archivos en el directorio. Eso es lo que os.listdir hace por usted. También agregué una división más sofisticada. rsplit opera desde la derecha, y solo dividirá el primer . que encuentre. Observe el 1 como el segundo argumento.

2

Para tratar los nombres de rutas y archivos, es mejor usar el módulo incorporado os.path en Python. Consulte la función dirname, basename y split en ese módulo.

-1

otro ejemplo:

f.split('\\')[-1].split('.')[0] 
Cuestiones relacionadas