ChanServ changed the topic of #libreoffice-ru to: Канал поддержки русскоязычных пользователей LibreOffice | Wiki TDF http://tdf.io/wikiru | On-line документация http://tdf.io/helpru | Логи канала: http://goo.gl/gzwdwU
<lo-ru-tg> <a​lex_furlong> пардон, не увидел, вопросов нет
_whitelogger has joined #libreoffice-ru
JohnDoe_71Rus has joined #libreoffice-ru
_whitelogger has joined #libreoffice-ru
_whitelogger has joined #libreoffice-ru
mmxbow has joined #libreoffice-ru
<lo-ru-tg> <Eugene> Привет! Открываю csv файл для импорта. В конце получаю такое сообщение:
<lo-ru-tg> <Eugene> "The data could not be loaded completely because the maximum number of characters per cell was exceeded." [OK]
<lo-ru-tg> <Eugene> Как узнать какие данные (или части данных) не импортировались?
<lo-ru-tg> <Eugene> Если интересно, файлик закинул вот сюда: https://dropmefiles.com/313473
<lo-ru-tg> <Илья> Ограничения для calc
<lo-ru-tg> <Eugene> Ну вот отсюда и непонятно - он все 32 Кб в ячейку загрузил или где-нибудь обрезал?
<lo-ru-tg> <Илья> Видимо, нужно попробовать найти в csv файле строки длиннее чем ограничение для ячейки и в них выбрать ячейку имеющую слишком большую длину. Я к сожалению не могу открыть файл. У меня сейчас rar нечем открыть.
<lo-ru-tg> <Eugene> Вот ZIP этого же файла: https://dropmefiles.com/603764
<lo-ru-tg> <Eugene> Проблемный столбец, скорее всего - DESCR_CONTENTS.
<lo-ru-tg> <Eugene> Применяя на весь столбец фильтр, я не вижу ни одного "(empty)", то есть скорее всего LO не дописывает данные в ячейки. Узнать бы в какие именно.
<lo-ru-tg> <Eugene> Хм... DESCR_CONTENTS имеет длину 3097 байт или меньше.
<lo-ru-tg> <Eugene> Нашел такую багу - если скопировать результат формулы и вставить как "Past Special - Text" - в результате получается пустое поле. Если вставить как "Past Special - Number" или "Past Special - Unformatted text" - вставляется значение.
JohnDoe_71Rus has quit [Quit: KVIrc 5.0.1 Aria http://www.kvirc.net/]
<lo-ru-tg> <Илья> Похоже что привышение в ячейке 2-го столбца
<lo-ru-tg> <Илья> строку пока не определил
<lo-ru-tg> <Илья> строка 61046
<lo-ru-tg> <Eugene> Странно, в файле всего 11 755 строк.
<lo-ru-tg> <Eugene> Вообще, документ доволно интересный попался - там глюки Calc вылазят каждые пару минут.
<lo-ru-tg> <Eugene> Например, некоторые столбцы имеют очень маленькую ширину при открытии.
<lo-ru-tg> <Eugene> Или вот - пытаюсь вставить пустой столбец. Ждать нужно три минуты. И это в системе где свободно еще 20 гигабайт оперативки.
<lo-ru-tg> <Илья> Столбец точно правильно определил, но, возможно есть другие
JohnDoe_71Rus has joined #libreoffice-ru
<lo-ru-tg> <Eugene> Это какой-то адок работать с большими документами. Вставка столбца - 3 минуты, вычисление простейшей формулы C3=LEN(B3) для 12 тысяч строк - уже минут 15 прошло и я даже не знаю сколько он еще считать собирается...
<JohnDoe_71Rus> LO не база данных.
<lo-ru-tg> <Eugene> Так я и не использую его как базу данных. Мне надо просто CSV сохранить в XLSX. 12 тысяч строк - это вообще не проблема для электронной таблицы.
<lo-ru-tg> <Eugene> Илья второй столбец (FullPkgPath) имеет значения от 6 до 58 байт. Вряд ли там есть записи, которые превышают 32 Кб.
<lo-ru-tg> <Илья> Там разделителем табуляция является, или что-то другое?
<lo-ru-tg> <Eugene> Только табуляция
<lo-ru-tg> <K​ompilainenn> А был файл тут выложен да?
<lo-ru-tg> <Eugene> Чуть выше, на dropmefiles
<JohnDoe_71Rus> 12 тыс строк и по 32 Кб в ячейке... это явно не для табличного процессора
<lo-ru-tg> <Eugene> Конечная цель - сконвертировать CSV файл в XLSX без потерь, чтобы эту таблицу можно было импортировать в базу данных Oracle. Я уже почти всё перенёс, осталась только эта одна.
<JohnDoe_71Rus> а может быть так что в тексте для ячейки в csv попадается какой то служебный символ и криво обрабатывается
<lo-ru-tg> <Eugene> Это нормально, я на работе таблицы и по 30 тысяч и по 500 тысяч строк обрабатываю.
<lo-ru-tg> <Eugene> Конкретно в этих данных надо выяснить что именно Calc с ними делает - обрезает запись полностью или недописывает и главное - где именно.
<JohnDoe_71Rus> вариант порезать исходный csv на кусочки помельче и посмотреть может какой кусок конкретно сбоит. в нем искать
<lo-ru-tg> <Eugene> А пока решаю эту задачу, другие косяки вылезают. Добавление пустой ячейки в таблицу при незагруженной системе должно занимать не более 5-10 секунд.
<lo-ru-tg> <Eugene> [EDIT] А пока решаю эту задачу, другие косяки вылезают. Добавление пустой колонки в таблицу при незагруженной системе должно занимать не более 5-10 секунд.
<lo-ru-tg> <Eugene> Если честно, я бы ограничил "максимально число строк 1 048 576" и "Максимальное число столбцов 1 024", если программа уже начиет кряхтеть при 11 тысячах строках и 60 столбцах.
<lo-ru-tg> <economist> С такой памятью нужно читать csv в python+pandas, чистить типы там и пересохранять в ods/xls/pkl. Займёт секунды-минуту от силы.
<lo-ru-tg> <Eugene> Я так понял, чтобы вставить пустой столбец в таблицу, мне надо использовать pandas?
<lo-ru-tg> <economist> Да, если таблица огромна и требует чистки.И делать все это нужно в jupyterlab, т.к. в нем работать по-шагам с большими данными настолько удобно, что калки покажутся наручниками.
<lo-ru-tg> <Eugene> Спасибо, посмотрю.
<lo-ru-tg> <Eugene> Ð�о у менÑ� задача попроще - Ñ�конвертировать из одного формата в другой и, как выÑ�Ñ�нилоÑ�ÑŒ, надо глÑ�нуть где Calc терÑ�ет мои данные. При Ñ�том проÑ�тые операции при таблице 12 000 x 60 вызывают неожиданные трудноÑ�ти. Ð�екоторые проÑ�тые дейÑ�твиÑ� заÐ
<lo-ru-tg> <m​ishich666> В свое время импортировали в оракл огромные csv файлы биллинговых данных. Успешно. Средствами самого оракла.
<lo-ru-tg> <economist> Вот как задача решается за 11 секунд на Python+Pandas:
<lo-ru-tg> <economist> df=pd.read_csv('D:/Ports.zip', sep='\t') # Wall time: 318 ms
<lo-ru-tg> <economist> import pandas as pd
<lo-ru-tg> <economist> df.to_excel('D:/Ports.xlsx') # Wall time: 10.6 s
<lo-ru-tg> <economist> Вставка столбца с формулами - 4 сек:
<lo-ru-tg> <economist> df.insert(2,'col2len', df.FullPkgPath.str.len()) # Wall time: 3.91 ms
<lo-ru-tg> <K​ompilainenn> так и есть, проверил на твоем файле. Какая версию ЛО у тебя и какая ОС?
<lo-ru-tg> <economist> Ð’Ñ�е команды pandas выше, включаÑ� имена Ñ�толбцов - не набираютÑ�Ñ�, а ВЫбираютÑ�Ñ� из выпадающих Ñ�пиÑ�ков автодополнениÑ�, поÑ�ле набора 2-3 Ñ�имволов. То еÑ�Ñ‚ÑŒ Ñ�тот код не проÑ�то работает быÑ�трее вÑ�его, что вы видели, но и Ñ�оздаетÑ�Ñ� Ñ�тот код за Ñ�чиÑ
<lo-ru-tg> <economist> спользуется написанная на чистом С библиотека Numpy.
<lo-ru-tg> <Илья> /Ports
<lo-ru-tg> <K​ompilainenn> самое смешное, что этот экспорт в эксель точно также может потерять лишние символы
<lo-ru-tg> <K​ompilainenn> и потеряет, в Эксель тоже самое ограничение на 32к символов в ячейке
<lo-ru-tg> <economist> Ð� вот и нет. Мы же загрузили за 0,4 Ñ�ек таблицу? У наÑ� поÑ�вилаÑ�ÑŒ куча времени "на подумать". Значит можем проверить Ñ�татметодами, формулами, lambda - функциÑ�ми валидноÑ�Ñ‚ÑŒ данных, иÑ�править их. И лишь потом Ñ�охранÑ�Ñ‚ÑŒ в XLSX, разделив Ñ�лишком длÐ
<lo-ru-tg> <economist> andas (вдохновлен R-Studio, Matlab и др).
<lo-ru-tg> <economist> Впрочем, еÑ�Ñ‚ÑŒ один Ñ�лучай когда удобнее Ñ�делать препроцеÑ�Ñ� данных. Ð�апример криворукий программиÑ�Ñ‚ 1С напиÑ�ал импорт CSV файла Клиент банка (разделитель - Tab), а криворукий программиÑ�та банка - "забыл" напиÑ�ать обработку, убирающую Ñ�имÐ
<lo-ru-tg> <economist> от в этом редком случае - лучше написать скриптик на том же Python и определить по косв признакам (типам полей, данных) - где паразитный разделитель стоит подавить.
<lo-ru-tg> <economist> Ну и потом - данные для анализа/загрузки в БД - из CSV не надо никуда больше переводить ни в какой XLSX. Любую хируругию, чистку итп - проще, быстрее, нагляднее сделать в JupyterLab/Pandas, причем каждый шаг обработки - виден в отдельной "клетке" кода
<lo-ru-tg> <economist> В общем, какое время - такие и инструменты. Еще 10 лет назад альтернатив не было.
<lo-ru-tg> <economist> "Длинные" столбцы можно найти так, налету превратив всё, даже числа, в строки:
<lo-ru-tg> <economist> print(df[n].name, df[n].map(lambda x: len(str(x))).max())
<lo-ru-tg> <economist> ...
<lo-ru-tg> <economist> for n in df:
<lo-ru-tg> <economist> SUBST_VARS 2456
<lo-ru-tg> <economist> SUPDISTFILES 180228
<lo-ru-tg> <economist> TARGETS 139
<lo-ru-tg> <economist> ...
<lo-ru-tg> <economist> [EDIT] "Длинные" столбцы можно найти так, налету превратив всё, даже числа, в строки:
<lo-ru-tg> <economist> for n in df:
<lo-ru-tg> <economist> ...
<lo-ru-tg> <economist> print(df[n].name, df[n].map(lambda x: len(str(x))).max())
<lo-ru-tg> <economist> SUBST_VARS 2456
<lo-ru-tg> <economist> SUPDISTFILES 180228
<lo-ru-tg> <economist> TARGETS 139
<lo-ru-tg> <economist> А список самих go-файлов из огромных колонок можно получить так:
<lo-ru-tg> <economist> a = ''.join(df[df.DISTFILES.str.len() == df.DISTFILES.str.len().max()].DISTFILES)
<lo-ru-tg> <economist> a.split()
<lo-ru-tg> <Eugene> Windows 10, LibreOffice 7.0.3.1 (x64)
<lo-ru-tg> <K​ompilainenn> Хм
<lo-ru-tg> <K​ompilainenn> 🤷‍♂
<lo-ru-tg> <Eugene> Я придумал как можно найти что попортил Calc:
<lo-ru-tg> <Eugene> Импортировать csv, сохранить как ODF. Затем экспортировать обратно в CSV.
<lo-ru-tg> <Eugene> Разница между двумя файлами всего в пяти местах.
JohnDoe_71Rus has quit [Quit: KVIrc 5.0.1 Aria http://www.kvirc.net/]
<lo-ru-tg> <K​ustovV> кроссавчик
<lo-ru-tg> <K​ustovV> 👍
<lo-ru-tg> <Eugene> В общем, Calc просто обрезает длинную строку. В данном случае это была колонка SUPDISTFILES ("BT"). У пакета "www/hugo" было большое количество модулей на Go для компиляции.
<lo-ru-tg> <Eugene> Вообще, две фичи хорошо бы зареквестить:
<lo-ru-tg> <Eugene> 2) Чтобы Calc предупреждал о том, что работа с документам будет медленной, начиная с какого-то порога (размера файла, количества ячеек или столбоцов).
<lo-ru-tg> <Eugene> 1) Чтобы Calc писал конкретные имена ячеек, где он обрезал данные, это может быть даже кратенький отдельный файлик с отчетом.
<lo-ru-tg> <economist> Ограничения Calc не зря объявлены - это и есть ваши ичи.
<lo-ru-tg> <economist> Каждой задаче - свой инструмент. Ваша задача решалась за 11 секунд плюс минута на написание кода (см выше ). И другая похожая - решится так же.
<lo-ru-tg> <economist> А разрабам LO хватает обычных багов для практики.
<lo-ru-tg> <economist> [EDIT] Ограничения Calc не зря объявлены - это и есть ваши фичи.
<lo-ru-tg> <economist> Каждой задаче - свой инструмент. Ваша задача решалась за 11 секунд плюс минута на написание кода (см выше ). И другая похожая - решится так же.
<lo-ru-tg> <economist> А разрабам LO хватает обычных багов для практики.
<lo-ru-tg> <economist> [EDIT] Ограничения Calc не зря объявлены - это и есть ваши фичи.
<lo-ru-tg> <economist> Каждой задаче - свой инструмент. Ваша задача решалась за 11 секунд плюс минута на написание кода (см выше). И другая похожая - решится так же быстро. Сравните со своим потраченным временем и ожиданием Калка.
<lo-ru-tg> <economist> А разрабам LO хватает обычных багов для практики.
<lo-ru-tg> <Eugene> Мне - нормально, т.к. остальные подобные таблицы я экспортировал в xlsx без проблем.
<lo-ru-tg> <Eugene> К сожалению, не все прямо так влёт могут писать на Пайтоне.
<lo-ru-tg> <Eugene> 11 секунд - это цена многих дней обучения.
<lo-ru-tg> <economist> Но Пайтон есть внутри LO, даже при портбл - версии. Т.е. к нему можно относится как к "батарейкам", которые стоит изучить и применять. Уж больно он быстр в подобных случаях.
<lo-ru-tg> <Eugene> Быстр, но это уже не LibreOffice. Вы назвали совершенно другой инструмент для решения,
<lo-ru-tg> <Eugene> Pandas, Anaconda - это какой-то другой продукт. Плюс, эти изученные знания вообще никак не передаются.
<lo-ru-tg> <Eugene> Если вызов того или иного диалога в LibreOffice я могу рассказать по телефону, то для Пайтона нужно будет писать, пересылать код, а так и рассказывать как именно его запустить.
<lo-ru-tg> <Eugene> А так, я пока искал, нашел еще более быстрый способ - https://convertio.co/csv-xlsx/
<lo-ru-tg> <Eugene> Правда, там не сообщают никаких подробностей. Система как-то сама догадалась о том, что разделитель - это <tab> и никаких ошибок не выдала.