El uso mágico de la función split () cuando python lee archivos txt

No sé si alguna vez ha experimentado la necesidad txtde leer datos que contienen varias filas y varias columnas de un archivo. Cuando leemos los datos, los datos se stringleerán en forma de, pero cómo convertir el tipo de datos se ha convertido en un gran problema. . Esta es una de las formas más simples y fáciles de usar del método incorrecto.

txtLos datos del archivo de prueba son los siguientes:

Prueba de datos de archivo
Usamos el siguiente código para leer el archivo y leer readlines()todos los datos a la vez.

with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
    all_data = f.readlines()
    print(all_data)
# ['6.317438621610765E-05  6.123920173773844E-05  0.00010382572761752979\n', '0.00010819194873178063  8.848784016828921E-05  0.0002043378699454479\n', '9.79660835582763E-05  9.750829986943346E-05  0.00021506758227284687']

No es difícil encontrar que en este momento todos nuestros datos se han leído en la misma línea, pero hay tres partes entre comillas simples, que son consistentes con las tres líneas en nuestros datos de prueba. También podemos ver que necesitamos dividir estos datos en partes separadas string, y luego podemos usar, por ejemplo, floatpalabras clave para realizar la conversión de tipo en estos datos. Vemos que los datos están separados por espacios. Primero pensamos que deberíamos usar un .split(" ")método para separar los datos con espacios. Probamos el siguiente código:

with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
    all_data = f.readlines()
    all_data = all_data[0].split(" ")
    print(all_data)
# ['6.317438621610765E-05', '', '6.123920173773844E-05', '', '0.00010382572761752979\n']

Primero tenemos que seleccionar la primera fila, usar all_data[0]y luego split(" ")separarlos en la función de uso . Podemos lograr el objetivo, pero también introdujimos el ""elemento de cadena vacía y \nel peligro oculto al final , que es muy complicado. Al hacerlo, hemos entrado en un malentendido. El enfoque correcto es el siguiente:

with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
    all_data = f.readlines()
    all_data = all_data[0].split()
    print(all_data)
# ['6.317438621610765E-05', '6.123920173773844E-05', '0.00010382572761752979']

No split()agregamos ningún parámetro cuando usamos la función, de modo que los ""elementos de cadena vacía y \nlos peligros ocultos al final se eliminan al mismo tiempo y cada cadena se separa al mismo tiempo. Si necesita generar varias filas de resultados, podemos predefinir una matriz para almacenar nuestros datos. El código completo es el siguiente: (todos los datos se pueden leer de esta manera)

import matplotlib.pyplot as plt
import numpy as np

array = np.zeros((3, 3))
with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
    all_data = f.readlines()
    for i, line in enumerate(all_data):
        numbers = line.split()
        for j, element in enumerate(numbers):
            array[i, j] = float(element)

print(array)
# [[6.31743862e-05 6.12392017e-05 1.03825728e-04]
#  [1.08191949e-04 8.84878402e-05 2.04337870e-04]
#  [9.79660836e-05 9.75082999e-05 2.15067582e-04]]

Si lo encuentra útil, levante la mano para dar un Me gusta y permítame recomendarlo a más personas ~

Supongo que te gusta

Origin blog.csdn.net/u011699626/article/details/110944889
Recomendado
Clasificación