Передача данных из сценария python в файл .csv или .txt - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу следить за качеством воздуха в моей квартире (сосед внизу заядлый курильщик). Для этого у меня есть Raspberry P ie 3, модель B +, подключенная к Enviro +.

В терминале я могу запустить скрипт, который измеряет мелкие частицы. python particulates.py ср. https://github.com/pimoroni/enviroplus-python/blob/master/examples/particulates.py

Затем он запускается и отображает данные в терминале, как на картинке ниже: (да, я лучше на go -ing, чем кодирование). text

Я заинтересован в ведении записи данных в текстовых файлах или CSV, поэтому я подумал, есть ли способ передать данные, которые отображаются на экране, непосредственно в CSV или текстовые файлы. Я знаю, что, возможно, я мог бы написать простой Python сценарий, который делает его красивым и трудным, но я слышал много похвал о добавлении Linux, что я хотел попробовать. Более того, я видел на одном форуме, что:

Awk и Sed ваши друзья по сценарию Shell. В Linux все является файлом, Awk и Sed могут записывать / редактировать файлы. Ужасные старые вещи, которые поставляются с каждой Linux ОС и просто работают.

Если вы используете веб-сервер, тогда вам не понадобится весь этот раздувной рабочий стол x11, просто безголовая Linux ОС. Легко поместите все это на карту 128 МБ. Busybox имеет веб-сервер или вы можете выбрать из множества вариантов. Я использую скрипт оболочки и Awk / Sed для перезаписи файлов CGI / HTML на лету.

Источник: https://www.raspberrypi.org/forums/viewtopic.php?t=248733

Я набрал в терминале следующее:

python Particulates.py > data.csv

Я также пытался:

python Particulates.py | data.csv

Данные отображались на экране, был создан файл CSV, но файл data.csv был пуст для оба варианта. Если мое понимание правильное, мне нужно поместить stdout в файл частиц.py в data.csv. Там должно быть что-то упущенное, потому что то, что я получаю, далеко от того, что этот адвокат awk / sed рекламировал на форуме.

Любая подсказка, как мне это сделать? и если я планирую результаты, я буду использовать gnuplot? могу ли я использовать его в одной линии, как в цепочке труб?

Спасибо за помощь.

1 Ответ

1 голос
/ 16 апреля 2020

Проверьте код библиотеки https://github.com/pimoroni/pms5003-python/blob/master/library/pms5003/ init .py # L66 , чтобы понять, какие значения входят в каждый столбец:

    def __repr__(self):
        return """
PM1.0 ug/m3 (ultrafine particles):                             {}
PM2.5 ug/m3 (combustion particles, organic compounds, metals): {}
PM10 ug/m3  (dust, pollen, mould spores):                      {}
PM1.0 ug/m3 (atmos env):                                       {}
PM2.5 ug/m3 (atmos env):                                       {}
PM10 ug/m3 (atmos env):                                        {}
>0.3um in 0.1L air:                                            {}
>0.5um in 0.1L air:                                            {}
>1.0um in 0.1L air:                                            {}
>2.5um in 0.1L air:                                            {}
>5.0um in 0.1L air:                                            {}
>10um in 0.1L air:                                             {}
""".format(*self.data[:-2], checksum=self.checksum)

и использовать эти данные для напишите CSV:

import csv
from datetime import datetime


pms5003 = PMS5003()
time.sleep(1.0)

try:
    while True:
        try:
            with open('pms5003.csv', 'a', newline='') as csvfile:
                writer = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
                data = pms5003.read()  # PMS5003Data instance
                dt = datetime.now()
                writer.writerow([dt.isoformat()] + list(data.data[:-2]))
        except ReadTimeoutError:
            pms5003 = PMS5003()
except KeyboardInterrupt:
    pass
...