объединение двух файлов

Автор Jokersun90, 20 января 2020, 11:15

0 Пользователи и 1 гость просматривают эту тему.

economist

Зачем монстр VSCodium для нано-скриптов? - Используйте расширение APSO с пошаговой отладкой и окном переменных.

Зачем встроенный LO-Python для сабжа? - Используйте внешний Python (не имеет проблем с либами и VSCodium итд).

Да, есть те кто сумели настроить VSC/PyCharm/IDLE с LO-Python (см. Youtube) и работают с либами uno, pyuno (либы дают доступ к контексту документа LO). Но толковых мануалов нет, значит делаем вывод что не все гладко. К тому же это нужно лишь для больших и сложных задач COM/UNO-автоматизации, имитирующих действия людей (роботизация).

Штатный функционал OpenOffice|LibreOffice позволяет сделать многое обходным путем. И почти всегда можно написать python-код так, что он будет работать и без uno (одинаково и во внутреннем, и во внешнем Python). Или можно облениться схитрить и что-то написать недостающее на StarBasic/VBA. Такой подход позволяет быстро идти дальше.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ArsKam

Цитата: economist от 13 января 2023, 20:32Для работы с Python (и 100+ др. языками программирования) можно поставить самую популярную free/свободную IDE Visual Studio Code или Codium (близнецы). В них есть режим "блокнотов" (notebook), который позволяет создавать скрипт по кусочкам, в ячейках. При выполнении каждой ячейки - значения переменных не обнуляются, а висят в памяти. Это упрощает программирование кратно.
При правке, вставке, импорте кода отовсюду - IDE сама следит за синтаксисом, отступами, стилем кода с помощью т.н. линтеров. Плюс там "просто красиво".
Я, к своему сожалению и стыду, не имею опыта и знаний программирования ни в каком яп, не считая давних школьных задачек по turbo pascal, поэтому пока только следую Вашим советам

economist

Учиться нужно, это принесёт отдачу. Но начать лучше с обычного внешнего Python с офсайта https://python.org и желательно той же версии, что и в LO (3.8.10 скорее всего). Также поставьте APSO - это новый уровень питонизма в офисном пакете.

Учебных материалов и бесплатных курсов по Питону и работе с данными сейчас столько, что трёх жизней не хватит все пройти. Но как оптимально (и что) изучать - тут все индивидуально. Программируешь больше - и все чаще замечаешь что штатный функционал офисного пакета знаешь все хуже и хуже. Начинаешь злоупотреблять кодом там, где можно было обойтись командами меню и фишками.

Убеждён что наибольший эффект дают небольшие макросы на Basic и Python, которые легко написать, несложно понять и переписать, а главное - есть надежда что в суете жизни на это хватит времени и терпения.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ArsKam

Прошу прощения, только увидел, что имя папки с ods-файлами в скрипте (ТЕСТ) и фактически у меня в компьютере (test) разные

ost

#19
Возможно топикстартеру подойдет не портабельный LO, а возможность установки без административных прав, как мне. =) Если да, то есть отличный пост от @mikekaganski, в котором мне помогла последняя ссылка. Теперь всегда имею любую версию LO без оглядки на злых админов.

По поводу установки pandas в LO. Достаточно развернуть whl-архив pandas из https://pypi.org/project/pandas/1.5.2/#files в каталог <Каталог установки LO>\program\python-core-<номер версии пинтон>\lib\site-packages.
При этом в этот же каталог нужно развернуть whl-архивы пакетов, от которых зависит пакет pandas.
При этом требует некоторого внимания контроль соответствия версий устанавливаемых python-библиотек и версии питона, поставляемой с LO.
Например, для pandas, см циферки после "cp". Так "cp38" в наименовании пакета pandas говорит о том, что он работает с питоном версии 3.8.

Что касается меня, то для "взлета" pandas в каталог D:\Program Files\LO7432\program\python-core-3.8.15\lib\site-packages были развернуты (простая распаковка архивов .whl) следующие пакеты:
numpy-1.24.0-cp38-cp38-win_amd64.whl
pandas-1.5.2-cp38-cp38-win_amd64.whl
python_dateutil-2.8.2-py2.py3-none-any.whl
pytz-2022.7-py2.py3-none-any.whl
six-1.16.0-py2.py3-none-any.whl
скачанные с https://pypi.org/

По поводу среды разаботки:
APSO - лучше, чем ничего, но подходит для скриптов на пару десятков строк или около того в зависимости от болевого порога.
Имхо лучшее - VSCode. Быстрый, легкий, понятный, простая настройка виртуальных сред, которые есть просто палочка-выручалочка, особенно при переносе функционала с одной машины на другую и особенно в случае, если "другая" находится под жестким внешним админским контролем. По состоянию на сегодня нормальные IDE вроде Pycharm или даже Thony не прижились, не исключаю, что только в результате моей косности. =)


На борту:
Version: 7.4.3.2 (x64) / LibreOffice Community
Build ID: 1048a8393ae2eeec98dff31b5c133c5f1d08b890
CPU threads: 2; OS: Windows 6.1 Service Pack 1 Build 7601; UI render: Skia/Raster; VCL: win
Locale: ru-RU (ru_RU); UI: ru-RU
Calc: threaded

ArsKam

Цитата: ost от 29 января 2023, 18:05APSO - лучше, чем ничего, но подходит для скриптов на пару десятков строк или около того в зависимости от болевого порога.
Имхо лучшее - VSCode
Спасибо! Да, буду пробовать и пользоваться вашими подсказками и советами, пока не пройду порог практического незнания и отсутствия никакого опыта)

ArsKam

Цитата: economist от  9 января 2023, 16:40import glob
import pandas as pd
df = pd.DataFrame()
for f in glob.glob('C:/ТЕСТ/*.ods'):
    df = pd.concat([df, pd.read_excel(f, skiprows=4)], axis=0)
df.to_excel('C:/out.ods')
Очень приятно, что pd.concat сам сделал 1ю строку из df файлов заголовочной и не повторял ниже, но пока так не смог понять без перевода, почему эта строка делается двойная по горизонтали)

economist

Настройте скрипт:
skiprows=4 # не читает первые 4 строки каждого файла
axis=0     # объединяет таблицы в одну длинную, а с axis=1 - в одну широкую

Если с axis=0 от pd.concat таблица пухнет (становится широкой) - значит имена колонок в разных таблицах чем-то отличаются (даже на пробел). Вашу фразу "строка делается двойная по горизонтали" я понял именно так, что в таблице есть две колонки. например "ФИО" и "ФИО ". 

Для перевода официальной документации в браузере поставьте расширение SimpleTranslate (FireFox, Chrome) и настройте его на показ карточки перевода при выделении слова/фразы. Это самый быстрый способ перевода.

А чтобы ваш питон-скрипт набирался и запускался в том же самом браузере с переводом, и сам выдавал подсказки документации на ENG (по нажатию Tab), которые будет легко перевести на RUS выделением - поставьте самую популярную web-IDE:

pip install jupyterlab
Блокноты Юпитер - это еще один способ программировать на Python и еще 100+ языках, причем код в них разбит на ячейки, их можно выполнять произвольно и все переменные "висят в RAM", так что вы можете легко менять значения и выполнять заново ячейку с кодом, нажав на Ctrl+Enter. Перезапуск "кусочка" кода быстр, что делает Юпитерлаб идеальной средой разработки для ученых, datascientists итд, где ясно-понятно, с разбегу не напишешь код, нужны итерации.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ArsKam

Цитата: economist от 18 марта 2023, 23:41Если с axis=0 от pd.concat таблица пухнет (становится широкой) - значит имена колонок в разных таблицах чем-то отличаются (даже на пробел).
Да, Вы правы, заголовки различались немного. Спасибо за помощь!

economist

Вот как выглядит JupyterLab IDE и онлайн-перевод Python-документации по нажатию клавиши Tab, после выделению интересующей части текста мышью (есть и целиком темная тема, точнее несколько десятков на выбор). Но установить это во встроенный в LO Python вряд ли получится - сам Lab написан на JS-технологиях (NodeJS+npm+yarn), проще поставить обычный Python и в нем Lab.   
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ArsKam

А можно ли сделать подобное ignore_index, только с заголовочной строкой?

economist

Опять угадываю, вы хотите чтобы 1-е столбцы всех файлов оказывались в 1-м столбце, 2-е - во 2-м итд, независимо от "зоопарка" в именах заголовков? Это рискованно, можно совместить в одной колонке тонны и рубли, ИНН и оклады (да, 12-значные оклады  :)

Если не страшно, делайте так: , skiprows=5, header=None Число пропускаемых строк тут я увеличил на +1, чтобы ненужные "заголовки" сами не попали в тело таблицы. 

Но все-таки более правильно "причесать" все заголовки под один стандарт и заодно проверить дрейф данных: скопировать из последнего по времени файла строку с заголовком и добавить ее (первой) во все другие файлы, и посмотреть что поменялось (1-2-я строки). Если были лишь мелкие правки (пробелы, кавычки, опечатки) - протянуть заголовки за правый нижний угол на 2-ю и удалить 1-ю строку.

Если были серьезные правки с перестановкой столбцов - сначала исправить под вставленный образец и лишь потом протянуть. И тогда не надо ничего менять - pd.concat сделает одну узкую длинную таблицу.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ArsKam

Цитата: economist от 21 марта 2023, 14:46Опять угадываю, вы хотите чтобы 1-е столбцы всех файлов оказывались в 1-м столбце, 2-е - во 2-м итд, независимо от "зоопарка" в именах заголовков?
Да, спасибо! Причесать один выходной файл мне будет легче, чем вставить одинаковые заголовки в сотню моих исходных)