Как написать и сохранить каждую строку отдельно в текстовом файле? - PullRequest
0 голосов
/ 24 мая 2019

У меня два файла .py. Один создает случайное число с плавающей точкой от 1 до 10, а затем записывает его в файл. Другой рисует эти цифры. Моя анимация работает нормально, когда я пишу и «сохраняю», но благодаря автоматизации процесса записи данные сохраняются только после остановки программы, и file.close () выполняет действие (за пределами цикла).

Я пытался поместить .open и .close () в цикл, но таким образом он сохраняет только последнюю написанную мной строку, и мне все еще нужно приостановить программу.

код писателя:

import random
import time


i=0
with open('datatest.txt', 'w') as a:
    while True:
        line = str(i) + ',' + str(random.uniform(1,10)) + '\n'
        a.write(line)
        print(line)
        i += 1
        time.sleep(9)

графический код анимации:

#!/usr/bin/env python
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np


fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)

def animate(i):
    print("inside animate")
    pullData = open("data.txt","r").read()
    dataArray = pullData.split('\n')
    xar = []
    yar = []

    for eachLine in dataArray:
        if len(eachLine)>1:
            x,y = eachLine.split(',')
            xar.append(float(x))
            yar.append(float(y))

    ax1.clear()
    ax1.plot(xar,yar)

    plt.xlabel('Hora')
    plt.ylabel('Valor Dado')
    plt.title('Pseudo-Sensor x Hora')


ani = animation.FuncAnimation(fig, animate, interval=1000) 
plt.show()

Я ожидал увидеть «живое действие» процесса записи, сохраненного в моем текстовом файле, поэтому мой график обновлялся по мере выполнения каждого шага сохранения.

Спасибо за ваше время!

1 Ответ

0 голосов
/ 24 мая 2019

Вы можете каждый раз открывать файл в режиме добавления

while True:    
    with open('datatest.txt', 'a+') as a:
        line = str(i) + ',' + str(random.uniform(1,10)) + '\n'
        a.write(line)
        print(line)
        i += 1
        time.sleep(9)
...