Замечания: статья для совсем маленьких и крутым спецам по кодингу будет не интересно, лучше ее пропустить. В коде первым комментарием поставлена ссылка на расположение файла с этим кодом для удобства и простоты. Главная задача была получить результат в виде таблицы SQLite. Качество кода оцениваем как ниже среднего, но с заявкой на максимальную простоту. Код написан достаточно просто и без пояснений, но готовы исправиться, поясниться. продолжение статьи (часть 2): "Продолжаем велосипедостроение с Python, xml, csv, sqlite. Часть 2. Ищем и правим ошибки, пока не налетаем на…" окончание трилогии тут (часть 3): "Последний велосипедно-питоний бой с ошибками импорта sqlite за 2 174 433 строчки. Часть 3" Что хотим сделать: взять данные по юридическим лицам (ЮЛ) РФ за 2019 год (идентификаторы ЮЛ: наименование и ИНН(ЮЛ), оборот, расход) и положить в SQLite.  Для строительства велосипедов использованы (но не пострадали): Виндовс 7х64 Питон 3.8.10 (если нет, берем тут). В качестве IDE использовалась Visual Studio Code, но абсолютно не принципиально, хоть блокнот. Открываем командную строку с правами администратора, создаем папку:                                                                                                       (cmd) D:\>mkdir 2021_8_16_oborot                                                                               Заходим в созданную папку: (cmd) D:\>cd 2021_8_16_oborot                                                                           И создаем виртуальное окружение для проекта:                                                             (cmd) D:\2021_8_16_oborot>python -m venv venv                                                             При желании можно его активировать в командной строке:                                           (cmd) D:\2021_8_16_oborot>venv\scripts\activate                                                             Код проекта можно запускать и в командной строке, но нам удобнее использовать для этого IDE и ее терминал.                                                                                               VSCode, как правило, активирует виртуальное окружение самостоятельно, но почему-то не всегда. Качаем исходный файл. Лучше каким-нибудь даунлодером (например Downloader Master). При попытках качать базы с ФНС и/или Росстата обычным браузером скачка часто обрывается. Исходный файл берем тут.                                                                                                                          Кладем исходный файл в папку: D:/2021_8_16_oborot/ish                                                Там же берем описание структуры набора данных (.xsd). Посчитали удобнее сразу расзиповать файлы: Запускаем в терминале IDE (правая клавиша мыши и "Run Python file in Terminal"). Если забыли установить пакет zipfile терминал будет ругаться на его отсутствие. Потому устанавливаем нужный пакет в терминале IDE (точно так же и в командной строке Виндоус, но не забываем активировать виртуальное окружение проекта):                                                                (venv) D:\2021_8_16_oborot>pip install zipfile                          Предварительно смотрим, что терминал запустился автоматически в виртуальном окружении (по непонятным причинами в VScode обычно запускается виртуальное окружение, но не всегда):                                  (venv) D:\2021_8_16_oborot>                                                                         Если виртуальное окружение не активировалось самостоятельно, то активируем его в ручную, так же как делали в командной строке Виндоус.  Получили итог: ошибок нет, файл расзиповался в 12 060 xml файлов. Если открыть файлы, то там много лишней (для нашей задачи) информации          А нам будут нужны только данные по юридическим лицам. В каждом файле xml их от 1 до 100 (примерно): Нам показалось удобнее распарсить нужные данные в файлы с такими же названиями, но .csv расширениями. Ну и положить в папку D:\2021_8_16_oborot\csv                                                                       Изначально в тестово-велосипедных целях взяли один файл из 12 060, переименовали его в test.xml и написали парсинг и запись данных в .csv файл. Запустили код, убедились, что все ОК. Данные в каждом из файлов выглядят так: Данные по каждому ЮЛ в отдельной строчке, данные разделены запятыми. Теперь можно в цикле брать и парсить все 12 060 файлов. После того, как мы записали все csv файлы оказалось, что мы сделали ошибку в путях (пропустили '/' в этой строчке: И вместо того, чтобы записать все файлы в директорию D:\2021_8_16_oborot\csv\ они записались в общую директорию проекта, что не гуд.                                                                                                        Пришлось набросать код, чтобы найти все эти файлы и переместить их куда планировали изначально. Файлы были успешно переименованы и перемещены. Дальше мы написали Питоний код для создания базы данных, таблицы и записи данных в цикле из всех 12060 csv файлов в таблицу. К сожалению сделать этого не удалось, выходили разные ошибки, которые мы не смогли пока решить.  С этой проблемой мы разберемся и сразу дополним статью.  Но так как основная задача была быстро получить финишный результат, то идем дальше к финишу.  Поэтому мы пошли так: слили все данные в один csv файл.  В процессе работы код использовал почти 0,7ГБ памяти, но благополучно записался. Раз уж у нас сегодня день велосипедостроения, то для импорта единого файла используем менеджеры SQLite вместо Питона. В итоге: DB browser (SQLite) не смог импортировать этот файл. Вылетел с записью "Это не ошибка, но в записи № 1 125 507 чой-то не то. Аналогично не импортнул и SQLite Expert Единственный, кто смог импортировать был SQLite Studio (ver.3.3.3). Было записано 1 089 044 строчек в таблицу. По идее каждая строчка должна быть отдельным данными по одному ЮЛ. Но как выяснилось в таблице нашлось небольшое количество битых строк, у которых в одну ячейку записались данные нескольких ЮЛ, чего, естественно быть не должно. Разбираемся, что это могло быть. Пока предварительная идея, что в исходных данных или в csv файлах есть битые данные, которые ломают правильное формирование таблицы. Но это нужно проверить, найти ошибку. Планы по исправлению, нахождению причины: продетектить на ошибки (и соответствие схеме) всю исходную директорию, всю директорию с csv файлами, весь "большой" csv файл. Поискать ошибки при записи в таблицу Питоном, вывести ошибки обработки - записи в таблицу. Замечание. В то же время получить за раз примерно миллион строк с данными по ЮЛ вполне себе неплохо. Если учесть, что максимальное количество действующих ЮЛ доходило по РФ до 4,5 миллиона, а в последнее время было порядка 3 - 3,5 миллиона. То есть у нас есть примерно треть от всех действующих компаний в таблице присутствует. При этом предполагаем, что двойников в таблице нет. Тоже, кстати, надо будет сделать - проверить. P.S. Код проекта в github пока не положен, в процессе. Будет положен сюда P.S.2 Изначально, когда мы получили xml-ки, то проверили один из файлов на соответствие схемы. Все было ОК. Но, как мы предполагаем в каких-то из файлов есть ошибки. Когда проверим обновим статью. А это код проверки только одного (из 12 060) файла на соответствие схемы. P.S.3. Сильно не бейте, это наш первый опус на Хабре. продолжение статьи (часть 2): "Продолжаем велосипедостроение с Python, xml, csv, sqlite. Часть 2. Ищем и правим ошибки, пока не налетаем на…"  окончание трилогии тут (часть 3): "Последний велосипедно-питоний бой с ошибками импорта sqlite за 2 174 433 строчки. Часть 3" python, data mining, business intelligence