Estoy tratando de cargar algunos datos de un archivo de texto, pero sigo recibiendo este error: ingrese la descripción de la imagen aquí

def getData(file):
    f = open('N_20_T_10.txt','r')
    x, y, z = [], [], []
    f.readline()
    for line in f:
        xp, yp, zp = line.split(' ')
        x.append(float(xp))
        y.append(float(yp))
        z.append(float(zp))
    f.close()
    return x, y, z
def plotData(inputFile):
    x, y, z = getData(inputFile)
    x = pylab.array(x)
    y = pylab.array(y)
    z = pylab.array(z)
    N = np.linspace(1, 100, 100)
    r = np.sqrt(x**2 + y**2+z**2)
    mean_r = N*r
    data = np.column_stack(N)
    data1 = np.column_stack(mean_r)
    print(data, mean_r)
    #print(N, r)
    np.savetxt('new.txt', list(zip(N, mean_r)), fmt='%.1f', delimiter=",")
    pylab.plot(N, mean_r)
    pylab.xlabel('N')
    pylab.show()
plotData('N_20_T_10.txt.txt')

Aquí están los datos que estoy usando. Creo que sigue llegando tal vez debido a algunos espacios en blanco adicionales en los datos, porque cuando uso un archivo diferente sin espacios funciona bien. Pero no estoy seguro. ingrese la descripción de la imagen aquí

0
Advaita 5 oct. 2019 a las 23:39

3 respuestas

La mejor respuesta

De la imagen parece que antes del primer número hay un espacio. Luego obtendrá 4 elementos de la operación split(' '). Vea el siguiente ejemplo:

numbers = " 1 2 3"
numbers.split(' ')
# output: ['','1', '2', '3']

Puede resolver su problema omitiendo el primer elemento de la matriz de la siguiente manera:

numbers.split(' ')[1:]
# output: ['1', '2', '3']

O usando strip():

numbers.strip().split(' ')
# output: ['1', '2', '3']

O simplemente puede usar split() sin un parámetro:

numbers.split()
# output: ['1', '2', '3']

Entonces, en su caso, el siguiente código debería funcionar:

xp, yp, zp = line.spilt()
1
Massifox 5 oct. 2019 a las 20:57

Si se trata de un problema de espacio en blanco, puede resolverlo utilizando la división sin definir el separador. Documentos divididos explican:

Si sep no se especifica o es None, se aplica un algoritmo de división diferente: las ejecuciones de espacios en blanco consecutivos se consideran como un único separador ...

Y ejemplo

>>> '   1   2   3   '.split()
['1', '2', '3']
1
makozaki 5 oct. 2019 a las 20:54

Intentaría eliminar todos los espacios en blanco al principio y al final de cada línea usando

xp, yp, zp = line.strip().split(' ')
1
Olvin Roght 5 oct. 2019 a las 20:53
58252161