es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Importar información a clases desde un archivo txt

Mi problema es que la información en el archivo .txt tiene 10 columnas y el espacio entre las columnas no es el mismo.

Aquí está el ejemplo:

Fecha Hora Latit(N) Long(E) Profundidad(km) MD ML Mw Región Método
———- ——– ——– ——- ———- ———— ———– ——-
2021.12.18 22:27:57 36.2620 28.9352 10.5 -.- 3.1 3.2 AKDENIZ Rápido
2021.12.18 21:53:20 35.0258 25.7753 5.0 -.- 2.7 -.- GIRIT ADASI ACIKLARI (AKDENIZ) Rápido
2021.12.18 21:26:37 36.9778 27.7713 3.8 -.- 1.6 -.- GOKOVA KORFEZI (AKDENIZ) Rápido
2021.12.18 20:35:30 37.8640 35.1760 5.4 -.- 1.5 -.- PINARBASI-CAMARDI (NIGDE) Rápido

Necesito de alguna manera importar la información en la clase que creé.

Aquí está la clase:

class datos_txt:
def init(self, fecha, hora, latit, long, profundidad, md, ml, mw, region, metodo):

    self.fecha = fecha
    self.hora = hora
    self.latit = latit 
    self.long = long
    self.profundidad = profundidad
    self.md = md
    self.ml = ml
    self.mw = mw
    self.region = region
    self.metodo = metodo 

def obtener_fecha(self):
    return self.fecha
def obtener_hora(self):
    return self.hora
def obtener_latitud(self):
    return self.latit
def obtener_longitud(self):
    return self.long
def obtener_profundidad(self):
    return self.profundidad
def obtener_md(self):
    return self.md
def obtener_ml(self):
    return self.ml
def obtener_mw(self):
    return self.mw
def obtener_region(self):
    return self.region
def obtener_metodo(self):
    return self.metodo

a_file = open(“input.txt”)
for linea in a_file:
fecha, hora, latit, long, profundidad, md, ml, mw, region, metodo = linea.strip().split(‘ ‘)

Intenté strip().split(‘ ‘) pero no funcionó.

Si alguien tiene alguna sugerencia, estaría sumamente agradecido.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Un enfoque para resolver el problema de la variación del espacio entre columnas en el archivo de entrada podría ser utilizar el módulo re en Python para extraer los datos basados en un patrón de expresión regular. Aquí hay una posible implementación:

    import re
    
    # Definir el patrón de expresión regular para extraer los datos
    pattern = re.compile(r'(\d{4}\.\d{2}\.\d{2})\s+(\d{2}:\d{2}:\d{2})\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s+([\w\s\(\)]+)\s+(\w+)')
    
    # Abrir el archivo de entrada y extraer los datos de cada línea
    with open("input.txt", "r") as f:
        for line in f:
            # Utilizar el patrón para extraer los datos de la línea
            match = re.match(pattern, line)
            if match:
                # Crear una instancia de la clase txt_data utilizando los datos extraídos
                data = txt_data(*match.groups())
                # TODO: Hacer algo con los datos, por ejemplo, almacenarlos en una lista o diccionario
    

    Este código define un patrón de expresión regular que coincide con los datos en cada línea del archivo de entrada, basado en un número fijo de caracteres para cada campo. Luego utiliza re.match para extraer los datos de cada línea y crear una instancia de la clase txt_data con los argumentos correspondientes. Luego puedes hacer lo que desees con el objeto data, por ejemplo, almacenarlo en una lista o diccionario para su procesamiento posterior.

Comments are closed.