Python: у меня есть TXT-файл, и я хочу создать кортеж с данными в столбце

Мне нужно импортировать текстовый файл в кортеж из Python , данные в файле выглядят следующим образом, я вырезал его только в качестве примера, поскольку в нем содержится много записей:

3654742449.47
3654742463.27
3654742468.27
3654742473.27
3654742478.27
3654742483.27
3654742493.27   122.11  0.13    100.00  0.00
3654742498.27   123.56  0.14    100.00  0.00
3654742503.27   123.82  0.15    100.00  0.00
3654742508.27   124.20  0.17    100.00  0.00
3654742513.27   125.09  0.20    100.00  0.00
3654742518.27   126.53  0.22    100.00  0.00

Мне удалось просмотреть файл и сгенерировать print, и он показывает мне только от строка 6 до конца. Только данные из 2-й столбец (это данные, которые меня только интересуют).

122.11
123.56
123.82
124.2
125.09
126.53

Теперь я хочу создать кортеж с этими данными, как я их сейчас показываю, я просто застрял и не знаю, как дальше.

y1 = (122.11, 123.56, 123.82, 124.20, 125.09, 126.53)

У меня есть такой код:

datos2=[]

file=open('grafica.txt','r')
contenido=file.readlines()
for i in range (6,len(contenido),1): #(usaré como separador el tabulador)
   dato1=contenido[i].find('\t')
   dato2=contenido[i].find('\t',dato1+1)
   dato3=contenido[i].find('\t',dato2+1)

   # .....   Así sucesivamente hasta que posiciones todos los separadores

   valor2=float(contenido[i][dato1+1:dato2])

   datos2.append(valor2)

   print(valor2)

С другой стороны, если я поставлю print(datos2) вместо print(valor2) я получаю несколько списков, и последний - тот, который мне нужен, и преобразую его в кортеж, я просто не знаю, как это сделать, чтобы получить только этот, а не те, что указаны выше.

[122.11]
[122.11, 123.56]
[122.11, 123.56, 123.82]
[122.11, 123.56, 123.82, 124.2]
[122.11, 123.56, 123.82, 124.2, 125.09]
[122.11, 123.56, 123.82, 124.2, 125.09, 126.53]

Это код, в котором я должен заменить кортеж y1 данными, упомянутыми выше, чтобы сгенерировать график.

from matplotlib import pyplot

y1 = (122.11, 123.56, 123.82, 124.20, 125.09, 126.53)

color1 = ('green')

pyplot.plot(y1, color=color1, linewidth=2, marker="o", label="temperatura")

pyplot.title("Gráficas de temperaturas en grados celcius")
pyplot.legend()
pyplot.grid()
pyplot.show()

Заранее благодарны

Габриэль Кастильо

1
задан 28.11.2019, 20:42
3 ответа

Твой код совершенный и делает именно то, в чем ты нуждаешься. Если я понял хорошо твою проблему, единственное, в чем ты нуждаешься, он состоит в том, чтобы получать результат в форме tupla. Ну вот, только ты должен делать ясный cast:

datos2 = tuple(datos2)

твой код остался бы таким:

datos2=[]

file=open('grafica.txt','r')
contenido=file.readlines()
for i in range (6,len(contenido),1): #(usaré como separador el tabulador)
    dato1=contenido[i].find('\t')
    dato2=contenido[i].find('\t',dato1+1)
    dato3=contenido[i].find('\t',dato2+1)

    # .....   Así sucesivamente hasta que posiciones todos los separadores

    valor2=float(contenido[i][dato1+1:dato2])

    datos2.append(valor2)

    print(valor2)

datos2 = tuple(datos2)

ты Можешь подтверждать, что это tupla следующего способа:

print(type(datos2))
0
ответ дан 01.12.2019, 10:44
  • 1
    Большое спасибо из-за твоего aportació n. С этой lí nea solucioné проблема: ´ ´ ´ ´ cadena_f = tuple (float (i) for i in datos2) ´ ´ ´ – Gabriel Castillo 30.11.2019, 01:53

конечно, что habrГЎ какая-то форма mГЎs pythonesca, но aquГ - у тебя есть мое предложение.

import pandas as pd 
iris = pd.read_csv("iris .data.txt",na_values=[" "])#Cargo archivo txt desde mi directorio ya que no se abría tu ejemplo
p=iris.drop(iris.columns[[ 2,3,4]], axis=1) #elimino las columnas que no quieres
p.columns = ['a1','a2']#nombro columnas restantes para mejor visualización
pp=p[1:7]#selecciono las filas que quieres
subset = pp[['a1', 'a2']] #convierto a tupla
tuples = [tuple(x) for x in subset.values]
print (iris)#visualizo dataframe inicial
print (pp) #visualizo dataframe que quieres (dos columnas y seis filas)
print (tuples)#visualizo tupla resultante
0
ответ дан 01.12.2019, 10:44
  • 1
    Спасибо за твой ответ. Я выполнил có я говорю, но меня бросает ошибка: Traceback (most recent call last): File " prueba_panda.py" line 3, in < module> p=iris.drop (iris.columns [[2,3,4]], axis=1) #elimino колонны, что ты не хочешь File " C:\Users\pcson01\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\indexes\base.py" line 4291, in getitem result = getitem (key) IndexError: index 2 is out of bounds for axis 0 with size 1 Репл Клосед – Gabriel Castillo 28.11.2019, 18:23
  • 2
    Хорошие Габриэль, я вновь выполнил код и он не дает мне ошибку, ты выполнил их с твоей консоли с Пайтоном 3.7?. – Ce ap 29.11.2019, 10:00

В continuaciГіn я показываю их cГіdigo законченный: 1. - Программа отказывается от первых шести линий 2. - Пробегается текстовый файл и производится tupla с данными о второй колонне, счастье tupla конвертирует данные string в float. 3. - Проходит tupla как ось Y, чтобы производить ее grГЎfica.


import matplotlib.pyplot as plt

datos2=[]

file=open('c:\\graficas\\1_358722296.txt','r')
contenido=file.readlines()
for i in range (6,len(contenido),1): 

    #(usaré como separador el tabulador)
    dato1=contenido[i].find('\t')
    dato2=contenido[i].find('\t',dato1+1)
    dato3=contenido[i].find('\t',dato2+1)


    valor2=float(contenido[i][dato1+1:dato2])
    datos2.append(valor2)


cadena_f = tuple(float(i) for i in datos2)


plt.plot(cadena_f, color='blue', linewidth=2, label="Temperatura" )
plt.title(u'"Gráficas de temperaturas en Grados Fahrenheit"') 
plt.ylabel('Grados Fahrenheit')
plt.grid()
plt.xlabel('Numero de muestras registradas')
#plt.xlim(0)
plt.ylim(0,300)

plt.show()

Большое спасибо во все из-за Ваших вкладов.

Габриэль Кастильо

0
ответ дан 01.12.2019, 10:44

Теги

Похожие вопросы