Найти - Пользователи
Полная версия: Помогите с экселем
Начало » Python для новичков » Помогите с экселем
1 2 3
doza_and
Если вы хотите чтобы оценили ваш код, то разумно будет его привести.
создание нового фрейма Довольно дешевая операция, ничего страшного.
also1
Это норм или можно умнее?
Умнее можно всегда. Мое мнение что оно должно упрощать вам жизнь. Сомневаюсь что на ваших данных вы исчерпаете память или будете сутками ждать результатов расчетов. А в поисках “умного” решения можно провести дни.

p.s.
Нужна разумность.
1. Если хотите сохранить установки то https://openpyxl.readthedocs.io/en/stable/tutorial.html#saving-as-a-stream
используйте шаблон файла.
2. pandas вообще неоднозначный инструмент. Он переусложнен и во многом отходит от приемов принятых в питоне. Если надо пару раз просуммировать ячейки и записать отформатированный результат то учить для этого pandas точно не стоит.
3. Если вы готовы потратить много времени на обеспечение максимального удобства пользователю то стоит взглянуть на pyQt или wxPython для создания полноценного приложения. Exel тоже неоднозначный инструмент. Он своенравен и считает что лучше вас знает что именно вам надо. Я сам был свидетелем как люди сутками бились над тем чтобы разумно организовать импорт экспорт csv таблиц, как десятки людей стояли на ушах когда перед сдачей финансового этапа в экселе развалилась система ссылок на внешние файлы, как однажды чуть не остановилась атомная станция когда человек воспользовался экселом для редактирования небольшой таблички с числами и умный ексел молча заменил некоторые плавающие числа на даты 1.12 на 1 Декабря…. Что уж тут говорить про свистопляску с запятыми вместо точек в плавающих числах.
В полноценном приложении вы гораздо лучше контролируете происходящее. За это правда надо платить большим объемом кода.
also1
doza_and Спасибо за развернутый ответ.
Особенно точно подмечено про особо умный эксель.
GUI для меня будет след шагом, пока разбираюсь с консолью.
И кстати вопрос про GUI: Как удобнее и лучше, сначала писать консольное приложение а потом его натягивать на интерфейс или сразу все делать в QT или wx
PEHDOM
also1
Как удобнее и лучше, сначала писать консольное приложение а потом его натягивать на интерфейс или сразу все делать в QT или wx
ИМХО для вас лучше сразу делать в QT или wx. На консольное приложение конечно можно натянуть ГУИ, но это лишний геморой и не всегда удобно. Или вы должны сразу писать консольное приложение с таким рассчетом что на него потом будет ГУИ натягиваться, но это , как мне кажеться, на данном этапе вам не под силу. Сначала разберитесь просто как работают событиеориентированые фрейморки QT или wx.
doza_and
PEHDOM
На консольное приложение конечно можно натянуть ГУИ, но это лишний геморой
Полностью соглаен.

С помощью консольных приложений вы можете отлаживать (или делать модульные тесты) отдельные куски которые потом будут использоватья как обработчики бизнес логики. Но об этом пока наверное рано думать.
xam1816
also1
Может вам посмотреть в сторону Sql(базы данных)+ python, по мне этот опыт будет более прогрессивнее
AD0DE412
PEHDOM
как мне кажеться, на данном этапе вам не под силу
эт вы зря
там же конструкторы есть ..
хотя у кого как .. наверное
also1
Наберусь смелости наглости: покритикуйте плиз
На это “творение” гуи натянуть можно или лучше заново?
AD0DE412
ну эт вам решать (скорее всего часть старого кода бдет так или иначе использована) c qt связываться не доводилось а с wx …
конструктор
https://m.youtube.com/watch?v=wg3q058Awj8&list=PLeHfkOtgcB2uoVqsaSb4FOpdxAFCGYL2c&index=1
https://github.com/wxFormBuilder/wxFormBuilder/releases/download/v3.9.0/wxFormBuilder_v3.9.0.exe
документация
https://docs.wxpython.org/
doza_and
also1
гуи натянуть можно или лучше заново?
Я думаю лучше заново.

У вас 3/4 кода это ввод с консоли и проверка его корректности.
С gui Этого не потребуется, там есть элементы ввода дат плавающих чисел и т.п со встроенными средствами валидации. Поэтому все это будет не нужно а новый код будет в 10 раз меньше.

Оставшаяся 1/4 Это бизнес логика на pandas. Я думаю тут сам алгоритм надо полностью переделать.

По сути Вы ведете учет транзакций Добавления убавления из кассы. Такое часто делают с использованием СУБД но вы можете и на файлах потренироваться.

Первое что надо - написать что вы хотите. Например. Хочу отслеживать текущую кассу. и историю изменений в кассе. Допустимые операции добавить выручку, забрать зарплату. Каждая операция должна сопровождаться датой и номером смены.

Второе - выбрать адекватные средства реализации. По сути вы пишете лог операций и вам нужно текущее состояние. Ну и сделайте два обычных файла. С текущей кассой и с логом операций. При этом инструмент записи надо брать такой чтобы не возиться с преобразованием данных из питона. Я бы взял pyyaml для наглядности. Я бы выкинул бухгалтерскую херню типа дебет кредет баланс. Комп не ошибается, расчеты практически ничего не стоят, мы считаем не на арифмометре если деньги берут из кассы мы вполне к числу можем минус приписать.
 import yaml
def log_operation(smena, tot, delta, op_type="Выручка"):
    """Этот файл только справочный и только пишется в конец"""
    with open("log.yaml","a",encoding="utf-8") as f:
          pos = f.tell()  # запомним позицию записи это поможет проверить соответствие лога и текущего состояния
          yaml.safe_dump(dict(t=datetime.datetime.now(),op=op_type,tot=tot,
                   smena=smena,delta=delta), f,allow_unicode=True)
      return pos
def sv_st(pos,tot):
    """запись текущего состояния кассы"""
    with open("tot.yaml","w",encoding="utf-8") as f:
          yaml.safe_dump({"pos":pos."tot":tot},f)
def ld_st():
    """чтение текущего состояния кассы"""
    with open("tot.yaml","r",encoding="utf-8") as f:
          return yaml.safe_load(f)
def on_v(self,evt):
     """пример обработки события добавления выручки"""
     tot=self.tot
     pos = self.pos
     try:
           self.tot+=self.doxod
           self.pos = log_operation(self.smena,self.tot,self.doxod, "Выручка")
           sv_st(self.pos,self.tot)
     except:
           # чтото пошло не так откатываем транзакцию
           self.tot=tot
           self.pos=pos
           sv_st(self.pos,self.tot)
           ......

По мелочи
 def some():
    ....
    some()  # это не цикл это рекурсия и это явно не то что вы хотите, Не делайте так!!!!
inkas = float(inkas.replace(',', '.'))  # не держите деньги во float он приближенный используйте 
# int или decimal  Я думаю если вам нужны копейки то и считайте все в копейках.
# тех кто пишет запятые вместо точек в плавающих числах надо немедленно увольнять а лучше вешать на фонарных столбах. Весь мир пишет точки. Запятые древнючий анахронизм.
PEHDOM
AD0DE412
эт вы зря
там же конструкторы есть ..
Дело не в том. Сложность не в том чтобы на форму контролов накидать, сложность написать именно консольное приложение, на которое потом без проблем можно натянуть ГУИ, не понимая как эти самые ГУИ работают.
py.user.next ниже более понятными словами расписал все.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB