Уведомления

Группа в Telegram: @pythonsu

#1 Март 12, 2017 16:45:54

sunny777
Зарегистрирован: 2017-03-12
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг файла Свет.ods

Доброе время суток, уважаемые !

Есть необходимость, парсить файл Свет.ods (не коммерческое, личное )
Образец без данных во вложении.

 Нужно найти ячейку с формулой =NOW() - в приложенном файле [J82].
И вытащить значения ячеек, которые находятся в строке 82 соответственно.
А именно значения ячеек [B82] и [C82] - где В, С, J величины постоянные.

Все это крутится на роутере под OpenWrt 15.05, корень перенесен на флешку
Файл находится в директории /mnt/sda1/Свет.ods

Были установлены:
 opkg install git
opkg install python
opkg install python-setuptools
python 2.7.9-6

Далее:
 git clone http://github.com/pyexcel/pyexcel-ods.git
cd pyexcel-ods
python setup.py install

Далее попытался сочетать несочитаемое
https://pypi.python.org/pypi/pyexcel-ods
http://webtoks.ru/python/ispolzovanie-python-dlya-razbora-tablichnyx-dannyx/

Опыта в python 0%, но очень хочется
Буду признателен за образец скрипта, или сам скрипт
Нужен как минимум шаблон - как делать, как правильно ?
Заранее благодарен !!!

Отредактировано sunny777 (Март 12, 2017 17:59:39)

Прикреплённый файлы:
attachment Свет.ods (39,9 KБ)

Офлайн

#2 Март 12, 2017 17:45:07

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Парсинг файла Свет.ods

sunny777
Все это крутится на роутере под OpenWrt 15.05
Эк у вас закручено.
 libreoffice --convert-to csv  svet.ods
#soffice.exe --convert-to csv  svet.ods # for windows
И дальше не парите себе мозг и работаете с csv



Офлайн

#3 Март 12, 2017 17:48:38

sunny777
Зарегистрирован: 2017-03-12
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг файла Свет.ods

и работаете с csv

А это как, можно на пальцах ?
Говорят сегодня магнитные бури
Пытаюсь автоматизировать передачу показаний с электросчетчика из офисного файла..

Установлены пакеты:
python 2.7.9-6
python-base 2.7.9-6
python-codecs 2.7.9-6
python-compiler 2.7.9-6
python-ctypes 2.7.9-6
python-db 2.7.9-6
python-decimal 2.7.9-6
python-distutils 2.7.9-6
python-email 2.7.9-6
python-gdbm 2.7.9-6
python-light 2.7.9-6
python-logging 2.7.9-6
python-multiprocessing 2.7.9-6
python-ncurses 2.7.9-6
python-openssl 2.7.9-6
python-pydoc 2.7.9-6
python-setuptools 7.0-1
python-sqlite3 2.7.9-6
python-unittest 2.7.9-6
python-xml 2.7.9-6

Да, виндовс мы не пользуемся…

Отредактировано sunny777 (Март 12, 2017 18:24:20)

Офлайн

#4 Март 12, 2017 18:53:13

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Парсинг файла Свет.ods

sunny777
Говорят сегодня магнитные бури
Все сильно зависит от данных, может что и надо будет поправить.
никакие внешние пакеты питона тут вообще не используются.
 import subprocess as sp
import re
sp.check_call("libreffice --convert-to csv svet.ods",shell=1)
with open("svet.csv","r") as f:
    data = [i.split(",") for i in f if re.search("\d\d:\d\d:\d\d$",i)]
print(data)

А вообще правильная мысль изначально не совать данные в *.ods файлы. На кой оно надо? Хранить данные надо как можно проще. Оно у вас мало что неудобно читать, да и места еще в 10 раз больше на диске занимает. А примитивные вычисления лучше делать в питоне а не полагаться на офисный пакет. Так вы сами лучше разберетесь что к чему.



Отредактировано doza_and (Март 12, 2017 19:05:05)

Офлайн

#5 Март 12, 2017 19:07:32

sunny777
Зарегистрирован: 2017-03-12
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг файла Свет.ods

Таблица давно используется для удобства просмотра статистики - хотя конечно можно графики строить

Смущает:

libreffice

И не только меня

/bin/sh: libreoffice: not found
Traceback (most recent call last):
File "/usr/bin/par.py", line 5, in <module>
sp.check_call("libreoffice --convert-to csv svet.ods",shell=1)
File "/usr/lib/python2.7/subprocess.py", line 540, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'libreoffice --convert-to csv svet.ods' returned non-zero exit status 127

Откуда libreoffice возьмется на роутере
Роутер - как элемент “системы умного дома”, работает как NAS, видеорегистратор и потенциально предполагается использовать его для сбора данных со счетчика…

Я правильно понимаю, что с кириллицей будут проблемы ?
svet.ods
И даже это не поможет ? :
workbook = xlrd.open_workbook('my_file_name.xls', encoding='cp1252')

===

Преобразовал файл ручками сделал так:

import get_data
data = get_data("/mnt/sda1/Svet.csv","r") as f:
data = [i.split(",") for i in f if re.search("\d\d:\d\d:\d\d$",i)]
print(data)

И получил результат:
  File "/usr/bin/par.py", line 5
data = [i.split(",") for i in f if re.search("\d\d:\d\d:\d\d$",i)]
^
IndentationError: unexpected indent

Отредактировано sunny777 (Март 12, 2017 19:32:16)

Офлайн

#6 Март 12, 2017 19:45:59

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Парсинг файла Свет.ods

sunny777
Откуда libreoffice возьмется на роутере
Очевидно не возьмется. Обрабатывать надо там где офис есть. Вообще надо поискать не ods файл с данными.
Я кстати не уверен что в ваших ячейках появятся данные которые есть результат вычислений если нет офиса.

sunny777
Я правильно понимаю, что с кириллицей будут проблемы ?
Не совсем. Тут может быть 2 проблемы. Кодировка имени самого файла и кодировка содержимого.
Для родного юникса проблем не должно быть. А внутри ods так вообще utf-8 вроде. Я не думаю что вообще нужно encoding='cp1252' тем более что обычно ведь в России encoding='cp1251'.
Это раз.
А два - откуда у вас будут проблемы? Вам ведь данные нужны, они отлично будут читаться в любой кодировке.

sunny777
И получил результат:
Я вообще не в курсах что такое get_data, и отвечаю за свой код а не за ваш. Похоже вы написали правду и в питоне 0. Только непонятно зачем вы тогда работающий код ломаете?
Результат очевидно говорит что в вашем коде синтаксические ошибки. В питоне важны отступы. в частности не рекомендуется использовать табуляции.




Отредактировано doza_and (Март 12, 2017 19:51:22)

Офлайн

#7 Март 12, 2017 19:50:23

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Парсинг файла Свет.ods

doza_and
Я кстати не уверен что в ваших ячейках появятся данные которые есть результат вычислений если нет офиса.
А я уверен. Не появятся. В xml OpenDocument хранит формулы, которые вычисляет непосредственно уже внутри своей оболочки.

Офлайн

#8 Март 12, 2017 20:03:55

sunny777
Зарегистрирован: 2017-03-12
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг файла Свет.ods

Обрабатывать надо там где офис есть.
Здесь смысл именно в обработке на девайсе с низким энергопотреблением, который работает в режиме 24/7.
NAS и видеорегистратор уже работают, причем motion - достаточно нагружает роутер, хотя все работает уже 1.5 года
===
Какие могут быть варианты ?
Создавать обычный текстовый файл - писать туда данные, обрабатывать их, и из этого файла экспортировать в *. ods ?

===

Похоже вы написали правду и в питоне 0
А смысл писать неправду, я …. в других вещах достаточно приуспел

Отредактировано sunny777 (Март 12, 2017 21:03:07)

Офлайн

#9 Март 15, 2017 10:56:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Парсинг файла Свет.ods

sunny777
Откуда libreoffice возьмется на роутере
До роутера должно быть преобразование в другой формат, а после роутера - обратно.

sunny777
Смущает:
libreffice
А то, что данные находятся в файле, предназначенном для работы в OO (OpenOffice -> LibreOffice) не смущает? Так вот в этом-то и проблема: теперь для файла нужен OO, а его нет, так как дело на роутере происходит. Данные принято упрощать как можно больше, либо они должны быть в распространённом формате. Идеально - текстовые данные.

В лине, если ты не заметил, все программки обмениваются текстом (cat, grep, sed, wc) по каналам. И этот текст даже немного структурирован в виде последовательности строк, но не более того. Почему так сделано? Потому что одна программа может появиться в 1970 году, а другая - в 2017. И если программу 1970 года привязать к какому-нибудь формату ods, хренэс и подобным, то он может сдохнуть спустя какое-то время и его просто потом не прочитаешь (да и нафиг он нужен, если дохлый уже, зачем писать читальщик дохлого формата). А текст будет жить и прочитаешь его чем угодно в любом веке.

Поэтому тебе и предлагают: отвяжись от ods, сделай такой формат, который будет жить и через 100 лет, а не сдохнет вместе со своей программой, в которой он там когда-то использовался. Он хороший (OO, LO), но привязываться к форматам - неправильно. Используй csv, xml, json, sqlite (на крайняк, хотя это тоже бинарное).


Отвяжешься - и сразу не нужно будет проделывать всё вот это.
sunny777
Были установлены:

opkg install git
opkg install python
opkg install python-setuptools

python 2.7.9-6

Далее:

git clone http://github.com/pyexcel/pyexcel-ods.git
cd pyexcel-ods
python setup.py install



Отредактировано py.user.next (Март 15, 2017 11:02:04)

Офлайн

#10 Март 15, 2017 20:47:06

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Парсинг файла Свет.ods

sunny777
и из этого файла экспортировать в *. ods ?
Вот это непонятно вообще. Зачем вообще нужен ods? Для просмотра данных в офисе?
sunny777
А смысл писать неправду, я …. в других вещах достаточно приуспел
Я имел ввиду что чаще всего реализуются два варианта.
Вы хотите выучить язык и им пользоваться. Тогда вам надо почитать учебник. После 10% книжки вопросы которые вы задали про get_data в принципе исчезнут. А на форуме вам думаю не будут учебник пересказывать, да и дольше это чем самому читать.
Вы не хотите учить язык, а хотите результата. Тогда нужно просто объявить сумму и написать техническое задание. И думаю вам помогут.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version