LINUX.ORG.RU

python - как работать с csv файлом?

 ,


0

1

Как лучше всего банковскую выгрузку csv подготовить для импорта в программу личного бюджета с помощью Python (csv)?

Например, нужно понять что это, приход или расход. Затем, в зависимости от комментария назначить нужную категорию (т.е. добавить столбец в csv и т.п.).

Как это лучше всего сделать? Сейчас у меня из csv уходит в sqlite, затем обратно в csv.

Насколько для моих задач (парсинг текста, переформатирования), подходят csv.DictReader, например?

Я не программист, программы никогда не писал, по-этому не особо представляю как сделать правильно с точки зрения архитектуры этого добра, что бы было легко расширять критерии парсинга комментариев к проводкам, что бы на их основе делать категории и т.п.

Спасибо.

★★★★★

Последнее исправление: DALDON (всего исправлений: 1)

Ты не задал ни одного конкретного вопроса, не сформулровал минимально внятного ТЗ, и даже не предоставил примера данных.

Я не программист

Делай как получится.

Но с таким подходом не получится никак, иди в job.

WitcherGeralt ★★
()

Я в принципе понял, что вы хотите, несмотря на то что написано очень невнятно.

Но учитывая, что

программы никогда не писал

непонятно чего вы ждете? Чтобы за вас написали код?

А работать с csv в python очень просто. Вот даже погуглил пример https://all-python.ru/osnovy/csv.html

qaqa ★★
()
Последнее исправление: qaqa (всего исправлений: 1)
Ответ на: комментарий от qaqa

Вопрос простой, стоит вникать в словари, или есть что-то более подходящее под мою задачу?

DALDON ★★★★★
() автор топика
Ответ на: комментарий от WitcherGeralt

Как получится налепил :) Хотел понять, стоит ли уходить с sql на словари, или может есть что-то более годное для подобных задач.

DALDON ★★★★★
() автор топика

Покажите хоть примеры того, что берёте и что хотите из этого сделать. Так будет проще подсказать.

th3m3 ★★★★★
()
Ответ на: комментарий от DALDON

Так и покажи то, что налепил. Если что-то не так, тебе и подскажут. А задачи у тебя никакой нет, это наколенное поделие для личного пользования, вообще без разницы как оно будет написано, лишь бы работало.

WitcherGeralt ★★
()
Ответ на: комментарий от DALDON

Вопрос простой, стоит вникать в словари

Как будто словари это какая-то огромная область знаний.

Из вашего описания непонятно следующее: это разовая задача или нет? Какие объемы данных там?

qaqa ★★
()
Последнее исправление: qaqa (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

В текущей поделке не всё устраивает. :) Вот думаю, надо потыкать, переписать что ли. Везде пишут что csv и словари мол не плохо, но я как-то не очень уверен)

DALDON ★★★★★
() автор топика
Ответ на: комментарий от qaqa

Сотни строк: расходы и доходы из банка за пару месяцев. Что бы ручками не дублировать в программе mmex

DALDON ★★★★★
() автор топика
Ответ на: комментарий от DALDON

Везде пишут что csv и словари мол не плохо

Это как тёплое и мягкое, каждое по отдельности неплохо, а вместе совсем не обязательно.

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 2)

Без меня этот тред будет неполон!

Везде пишут что csv и словари мол не плохо, но я как-то не очень уверен)

очень даже хорошо! особенно нравится вот это - Сейчас у меня из csv уходит в sqlite, затем обратно в csv.

Not_a_Troll
()
Ответ на: комментарий от th3m3

Пример прихода в csv из Банка:

Тип счёта;Номер счета;Валюта;Дата операции;Референс проводки;Описание операции;Приход;Расход;

Текущий зарплатный счёт;9217;RUR;10.12.21;O1R8FA;ЗАРАБОТНАЯ ПЛАТА. Основание 1YPJU Платёжное поручение №35 от 23.06.2021.;870;0;

Пример того что получаю (тут нет категории, я вынужден сам выбирать в mmex её):

23.06.2021,0,"9217","ЗАРАБОТНАЯ ПЛАТА. Основание 1YPJU Платёжное поручение №35 от 23.06.2021."

Ну в общем, меняю местами столбцы, выкидываю лишнее, но ещё остаётся много чего в ручном режиме. Вот вопрос простой: как наиболее просто работать с csv в подобной задаче? Загонять всё это в словарь, а потом изучать как там парсить значения в словаре, что бы потом из этого как-то сколотить новый словарь и уже выгрузить его в csv, или есть другой способ, более подходящий для подобной задачи?

DALDON ★★★★★
() автор топика
Последнее исправление: DALDON (всего исправлений: 1)
Ответ на: комментарий от DALDON

Удивлен этим. Кстати, если ты не программист, а с данными работать надо, то можешь в сторону jupyter посмотреть, возможно это твой инструмент.

adn ★★★★
()
Ответ на: комментарий от DALDON

Наиболее просто наверное и правда посмотреть на юпитер, он по большому счету и делался как редактор и вьюер для выборки данных и их визуализации, но его один черт придется изучать, но это явно будет проще чем учиться программировать.

anonymous
()

pandas, а вообще самый Ъ вариант это засунуть всё в БД и с ней работать без всяких там csv костылей. Надо уметь в SQL (он простой на самом деле, по крайней мере на том уровне что тебе надо, почитай какие-нибудь лекции и про нормализацию БД, тебе должно хватить) и из python-а через какой-нибудь биндинг(драйвер/обвязку не суть важно как называть) работать с базой данных. В случае sqlite это встроенный в питон модуль sqlite3. Но мне больше нравится postgreSQL соответственно через psycopg2, но это тупо потому что postgreSQL с более большими и серьёзными базами работает + наиболее полно соответствует SQL из популярных СУБД.

peregrine ★★★★★
()
Ответ на: комментарий от adn

Ну не знаю. Меня в юпитере отсутствие нормального IDE печалит. В платной версии пичарма она есть конечно, но покупать пичарм не программисту, вместо коммьюнити версии, ну такое.

peregrine ★★★★★
()
Ответ на: комментарий от DALDON

csv и словари

Смотря что в csv и как тебе надо данные представлять. В общем случае - плохо.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

В смысле нормального ide для jupyter? Не понимаю чего именно ты хотел?

adn ★★★★
()
Ответ на: комментарий от peregrine

В платной версии пичарма она есть конечно, но покупать пичарм не программисту, вместо коммьюнити версии, ну такое.

Плагин для vscode https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter
это не то, что ты хотел?

adn ★★★★
()
Ответ на: комментарий от peregrine

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

Зачем ему бд, лол?

anonymous
()
Ответ на: комментарий от adn

Это всё ужасно. Нет IDE для питона кроме пичарма. Остальное совсем детское. Это так же как с IDE для C# и VisualStudio (которая не code, а обычная). Вроде как альтернативы есть, но никто в здравом уме их использовать не будет, слишком большой разрыв в нужных и полезных фичах.

peregrine ★★★★★
()
Ответ на: комментарий от anonymous

Как раз про него, а конкретно про то как ты в базу данные напихаешь, чтобы они не дублировались и не зависели сами от себя непонятным образом. С более узким термином view из английского не путай.

peregrine ★★★★★
()
[19:27] u@netbook:~> psearch csv|grep -i py
devel/py-backports.csv    Backport of Python 3 csv module
devel/py-csv23            Python 2/3 unicode CSV compatibility layer
devel/py-get-reader       Return csv.reader-like objects from multiple sources
devel/py-tabulator        Consistent interface for stream reading and writing tabular data (csv/xls/json/etc)
devel/py-unicodecsv       Drop-in replacement for Python 2 csv module with Unicode support
textproc/py-csvkit        Command line tools for working with CSV
textproc/py-pyexcel-io    Read/write structured data in CSV, zipped CSV format and to/from databases
textproc/py-tablib        Format agnostic tabular data library (XLS, JSON, YAML, CSV)
www/py-djangorestframework-csv Django REST framework
IPR ★★★★★
()

этот мир сошел с ума. Пандас чтобы писать в csv… Есть стандартный модуль csv там классы reader и writer. Работают с обычными массивами/листами

cobold ★★★★★
()
Ответ на: комментарий от DALDON

Это самые навороченные в мире электронные таблицы. Для вашей задачи именно это и нужно

Shadow ★★★★★
()
Ответ на: комментарий от peregrine

Vscode с блокнотами работает. По-любому удобнее.

Shadow ★★★★★
()
Ответ на: комментарий от peregrine

Вот мой вопрос изначальный ровно про:

sqlite vs dict

Моё внутреннее ощущение говорит ровно о том, что мне нужен sqlite просто подпилить и работать с ним при помощи python.

DALDON ★★★★★
() автор топика
Ответ на: комментарий от IPR

Вопрос не в наличии модулей для работы с csv, а вопрос скорее как вертеть этими данными (взятыми и csv) как мне нужно.

DALDON ★★★★★
() автор топика
Ответ на: комментарий от cobold

Да. Стандартный модуль, вполне себе пишет и читает csv. Вопрос именно, как данные крутить. :)

DALDON ★★★★★
() автор топика
Ответ на: комментарий от DALDON

Вопрос именно, как данные крутить.

Проблема то в чём?

csv - таблица, так и работай с данными как с таблицей. Хочешь списками, хочешь, запихивай строки в ассоциативный массив, хочешь через датафреймы, хочешь через БД. Как умеешь, так и делай.

vvn_black ★★★★★
()
Ответ на: комментарий от DALDON

Эээ, ну тут зависит от того что именно подразумевается под «крутить данные». По описанию в одном из комментов выше где «переставлять, удалять столбцы» все достаточно тривиально. Прочитал строку из csv получил массив представляющий собой данные одной записи выписки. Из элементов этого массива формируешь новый массив, в который складываешь в нужном порядке данные нужных столбцов. Новый массив пишешь в новый csv. Все это заталкиваешь в цикл по всем строкам выписки. Перед циклом разбираешься с заголовком. Где то в начале пишешь в комментах для себя через пару месяцев форматы входных и выходных строк и что вообще тут делается(какие столбцы переставляются, какие удаляются, какие добавляются) Если парят числовые индексы столбцов то тут вижу 2 опции: а) сделать мнемонические константы и пользоваться ими; б) делать из прочитанного массива словарь, ключи для него можно брать из заголовка, если оный не меняется

cobold ★★★★★
()
Ответ на: комментарий от DALDON

вы мне чем-то местного светилу программирования в визуальных средах напоминаете, он такими же «терминами» описывает свою «деятельность». Что бы было понятней о чем я, я о «как данные крутить», «как вертеть этими данными (взятыми и csv) как мне нужно.», «Моё внутреннее ощущение», «просто подпилить и работать с ним при помощи python.», и т.д. выше по треду. Все сводится к тому, что вы просто не хотите читать документацию об апи для работы с цсв/скулайт, ровно как не хотите прочитать хоть одну книгу по пайтон, но хотите какой-то волшебный способ сделать из этого цсв/скулайт выборку и получить в итоге нужную информацию в удобоваримом для вас виде. Так что, ответ крайне короткий и простой, прочитать книгу по пайтон, прочитать документацию, реализовать и визуализировать нужную вам выборку. Для всего этого можно и jupyter воспользоваться как выше писали, его как раз для подобных задач и делали как средство визуализации с интерактивным вводом кода по типу repl. А в каком виде оставлять данные это вообще не принципиально если вы умеете делать выборку из них.

abcq ★★
()
Ответ на: комментарий от peregrine

Удобный отладчик и функции рефракторинга.

А поподробнее? напомню, что мы обсуждаем jupyter, но про отличие python'овского debugger'а pycharm от того, который в python plugin'е vscode я бы с удовольствием послушал. (как и про «функции рефакторинга»(какие кстати?))

adn ★★★★
()
Ответ на: комментарий от peregrine

В VSCode мне IDE не хватает, как и в vim-е или emacs-е. Пичарм людьми сделан хотя бы и для людей.

Так чего именно тебе не хватает в vscode? Или ты просто продавец решений jetbrains и до тебя не докапываться, так как кроме заученных общих фраз ты ничего сказать не можешь?

adn ★★★★
()
Ответ на: комментарий от adn

Не, я не продавец решений джетбрейнс. Потестирую вечерком vscode сейчас с указанными плагинами и отпишусь что меня не устраивает, когда я смотрел на юпитер (это было почти 3 года назад), меня не устроил моргающий шрифт в VSCode и неработающая клавиша Alt вроде или Windows, которая в винде работает в Electron-е, а в Linux-е не работает, но авторами плагинов захардкожена, а всё потому что авторы хромого не хотят фиксить такое поведение, ссылаясь на спеки FreeDesktop-а, говорят что это не баг, а фича.

peregrine ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.