Я делаю программу, которая читает значения времени и показания из файла .txt и выводит их на веб-страницу с помощью matplotlib. В моем случае есть много значений, и график может выглядеть очень запутанным, и с тысячами точек данных он также может быть вялым.
В настоящее время я читаю строки .txt с этим кодом, чтобы поместить значения в списки графиков:
with open('C:/Email/file.txt') as f:
lines = f.readlines()
dates = [str(line.split(';')[0]) for line in lines]
y = [float(line.split(';')[1]) for line in lines]
z = [float(line.split()[2]) for line in lines]
Содержимое файла .txt выглядит следующим образом:
30.05.18_12:27:17; 13.0; -0.0
30.05.18_12:27:18; 14.0; -0.0
30.05.18_12:27:19; 15.0; -0.0
30.05.18_12:27:20; 16.0; -0.0
Итак, есть ли способ прочитать и построить каждую N-ю (например, каждые 30. было бы идеально) временную метку и значение?
Я исследовал разные способы, но они кажутся запутанными.
Одним из решений, о котором я думал, является создание счетчика, который подсчитывает количество прочитанных строк, затем, когда счетчик равен 30, пропускает 30 следующих строк и считывает и отображает данные в строке 31. Я понятия не имею, как чтобы сделать это, так как я относительно новичок в Python.
Помощь будет оценена.
На всякий случай весь код здесь:
from flask import Flask
import numpy as np
import matplotlib.pyplot as plt, mpld3
from datetime import datetime
app = Flask(__name__)
@app.route("/")
def hello():
with open('C:/Email/file.txt') as f:
lines = f.readlines()
dates = [str(line.split(';')[0]) for line in lines]
y = [float(line.split(';')[1]) for line in lines]
z = [float(line.split()[2]) for line in lines]
date = [datetime.strptime(x,'%d.%m.%y_%H:%M:%S') for x in dates]
plt.figure(figsize=(10,5))
plt.title('Temperature', fontsize=15)
plt.ylabel('Temperature' + u'\u2103', fontsize=15)
plt.plot_date(date, y, 'r-', label='quadratic')
plt.ylim([10,35])
# Print as HTML
return mpld3.show()
if __name__ == "__main__":
app.run()
РЕДАКТИРОВАТЬ: ОГРОМНОЕ СПАСИБО MR. F-ROCHE
Получил работу со следующим кодом:
@app.route("/")
def hello():
with open('C:/Email/file.txt') as f:
# Counts lines in text (Use later to delete lines every X readings)
# lines = f.readlines()
cpt = 0
all_lines = []
for line in f:
cpt += 1
if cpt == 30:
all_lines.append(line)
cpt = 0
dates = [str(line.split(';')[0]) for line in all_lines]
date = [datetime.strptime(x,'%d.%m.%y_%H:%M:%S') for x in dates]
y = [float(line.split(';')[1]) for line in all_lines]
z = [float(line.split()[2]) for line in all_lines]
plt.figure(figsize=(10,5))
plt.title('Temperature', fontsize=15)
plt.ylabel('Temperature' + u'\u2103', fontsize=15)
plt.plot_date(date, y, 'r-', label='quadratic')
plt.ylim([10,35])
# Print as HTML
return mpld3.show()