Extraiga y ordene números de nombres de archivo en python
Frecuentes
Visto 92 veces
0
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
4 Respuestas
1
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
1
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
0
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
0
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 python numbers extract or haz tu propia pregunta.
Vale, lo comprobaré. Gracias por tu respuesta. - roland guichard