Extraiga y ordene números de nombres de archivo en python

Tengo una pregunta muy básica. Tengo archivos llamados como Dipole_E0=1.2625E-01.dat y quiero sacar el 1.2625E-01 parte y finalmente ordenarlos en orden ascendente. ¿Cómo se puede hacer esto? Primero intenté dividir el nombre del archivo con .split() pero no es lo que esperaba. Gracias por tu ayuda.

Mejores

Roland

preguntado el 22 de mayo de 12 a las 10:05

4 Respuestas

La mejor manera es usar expresiones regulares. Para obtener el valor del nombre del archivo:

m = re.search(filename, '^Dipole_E0=(.*)/s?')
val = m.group(0)

Recorra todos los nombres de dile y agregue todos los valores a la matriz. Después de ese tipo y eso es todo.

contestado el 22 de mayo de 12 a las 10:05

Vale, lo comprobaré. Gracias por tu respuesta. - roland guichard

Quiere buscar expresiones regulares. En python viven en el módulo re. Dependiendo del formato exacto, algo como:

import re
ematch = re.compile("=([0-9]*\.[0-9]*[eE][+-][0-9]+)")
val = ematch.search(filename).group(0)

La clasificación de una lista se puede hacer con el método .sort() en las listas, o con el método integrado ordenado (lista), que le brinda una nueva lista.

contestado el 22 de mayo de 12 a las 10:05

Esta es una buena situación para usar un expresión generadora y el sorted incorporado:

sorted(float(filename.split("=", 1)[1].rsplit(".", 1)[0]) for filename in filenames)

Dónde filenames es su lista de nombres de archivo.

>>> filenames = ["Dipole_E0=1.2625E-01.dat", "Dipole_E0=1.3625E-01.dat", "Dipole_E0=0.2625E-01.dat"]
>>> sorted(float(filename.split("=", 1)[1].rsplit(".", 1)[0]) for filename in filenames)
[0.02625, 0.12625, 0.13625]

contestado el 22 de mayo de 12 a las 10:05

Bien. Necesitaba la parte en la que transformas la cadena extraída en un flotador. Gracias. - roland guichard

Puede obtener los nombres de archivo con el módulo glob.

    from glob import glob
    file_names = glob("yourpath/*.dat")

    vals = []
    for name in file_names:
         vals.append(float(name[:-4].rpartition("=")[2]))

    vals.sort()            

name[:-4] tira el ".dat". rpartition es un método de cadena. Devuelve una tupla donde la entrada 0 es la cadena a la izquierda de la cadena utilizada para dividir, la entrada 1 es la cadena utilizada para dividir (aquí: "=") y la entrada 2 es la cadena a la derecha de esta cadena (aquí: su flotador). Luego se convierte en un flotante y se agrega a la lista de valores.

contestado el 22 de mayo de 12 a las 10:05

Correcto, parece lo que necesitaba. Gracias - roland guichard

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.