Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 11, 2016 17:10:54

Puten
Зарегистрирован: 2016-01-06
Сообщения: 40
Репутация: +  2  -
Профиль   Отправить e-mail  

Запись и редактирование данных в excel - Python

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

Не заглядывал, т.к. думал, что ответ уже дали и дальше самому, а оказалось, что люди еще пишут.

Офлайн

#2 Янв. 11, 2016 17:40:14

Puten
Зарегистрирован: 2016-01-06
Сообщения: 40
Репутация: +  2  -
Профиль   Отправить e-mail  

Запись и редактирование данных в excel - Python

doza_and
1 Я двумя руками поддержу мнение что в эксел. эти данные не надо пихать. Если интересно могу пару страниц недостатков такого подхода привести.
2. Я двумя руками проголосую за не высказанное пока мнение что не нужно паковать вашу программу в один экзешник. Файл *.py будет гораздо более удобен.
2) Т.е. нужно будет на комп ресепшина установить питон? Для локальной машины(моей) никаких проблем с пользованием .py файлов нету, но для программы общего пользования хотелось бы независимости. Если эту софтинку перенести на другой комп позже, то снова устанавливать питон?

FishHook
Ну это они сейчас так решили. Через полгода, когда данных станет много, они поймут, что им нужна какая-то минимальная бизнес-аналитика, отчеты какие-то, оперативный доступ к данным одновременно несколькими сотрудниками. Если бизнес не будет развиваться, то и начинать его не стоит. Вы же, когда программу пишете, подразумеваете, что она будет расширяться и обрастать функционалом?
Фирма существует больше 10и лет, просто до сих пор все записи делались ручкой в бумажном журнале. Т.к. искать в таком виде не очень удобно, попросили склепать програмку.

doza_and
Файл порядка 10 Мб будет обрабатываться очень быстро (сравнимо с временем на запуск приложения). Для вас это ~ 30000 записей. Это много? реально какая глубина по времени вам нужна?. Если больше, то да, субд неплохое решение. Если нет то и файла хватит.
30000 записей для нас это много. В день приходят и уходят около 1 - 10 пакетов, что дает нам несколько лет.

Z_M
Вот и рабочий совет для Puten:

Qt + pythonQt + openpyxl
Сейчас пробую приделать гуи через PyQt4 на питоне 3.4.4 (на 3.5 при экспорте в .exe вываливаются ошибки, которых нету на 3.4, поэтому пока делаю через 3.4, используя то pyinstaller, то cx_Freeze).

Код на данный момент:

# Post scanner
#
# Version 0.1
#
# Asks some questions and saves user input in a .csv file
# Each next run of the program adds new data to the existing .csv file
#
# TODO:
# 1) If file is in use, retry to save, not just finish the program
# 2) Attach gui
# 3) More, but can't remember
import datetime
import csv
from glob import glob
# Constants
COLUMN_NAMES = (
    'DATUM / TIJD',
    'TRACKINGSNUMMER',
    'AANTAL PAKKETTEN',
    'GETEKEND DOOR',
    'POST BEDRIJF')
QUESTIONS = (
    '\nScan the TRACKINGNUMBER:',
    '\nAMOUNT of packets?',
    '\nWHO scans?',
    '\nWhich POST?')
answers = list()
# Print each question and save user input in a list
for question in QUESTIONS:
    print(question)
    answers.append(input())
def csv_save(data_to_write):
    with open('post.csv', 'a', newline='') as csv_out:
        wtr = csv.writer(csv_out, dialect='excel')
        wtr.writerow(data_to_write)
# Check if file named 'post.csv' exists
file_exists = glob('post.csv')
# Add current time to answers list at 1st position (index 0)
time_format = '%a %d %b %Y %H:%M'  # format 'Sat 09 Jan 2016 11:05'
time_now = datetime.datetime.now()
answers.insert(0, time_now.strftime(time_format))
# Open .csv file(or create new one if it doesn't exists + write COLUNMS)
# and write answers, comma separated
if not file_exists:
    print('\nFile does not exists.')
    csv_save(COLUMN_NAMES)
    csv_save(answers)
    print('\nNew file is created.')
    print('\nAll data is saved.')
else:
    try:
        csv_save(answers)
        print('\nAll data is saved.')
    except PermissionError:
        print("Can't save, file is in use.")

Ссылка на код в более удобном формате

Т.к. живу в Голландии, то и весь текст в вопросах и выводе, в оригинале, так же на голландском, но для вас перевел на английский (меньше проблем с выводом русских символов).

Опыт питона 2 месяца, построение алгоритмов еще отсутсвтует, поэтому сильно не смейтесь

Что происходит в коде:
1) Вопросы и поля (ID, Почта, Кто принял) находятся в константах (line 19, 26)
2) Создается пустой список для ответов (line 32)
3) Циклом выводится вопрос и ожидается ввод, который будет сохранен в пустой список (line 35 - 37)
4) Функция сохранения в .csv (40 - 43) (на дописывание)
5) Так же добавляю на первую позицию в списке данную дату + время (line 49-51)
6) Через glob проверяю, есть ли файлик post.csv (line 55)
7) Если файлика нету (1й запуск), то он создается и в первую строку вписываются поля (ID, Почта и тд) (line 57)
Так же сохраняются ответы из списка (line 58)
Если файлик есть, то дописываются только ответы (line 63).
(Строки для pastebin)

Начал писать код, если файлик открыт и программа запущена, но еще не закончил.

Сейчас код делает всего 1 прогон и закрывается, нужно дописать, чтобы спрашивало “Есть ли еще посылки” и если “да”, то прогоняло снова. Файлик приходиться ручками импортировать в эксель, с разделением по запятой, тогда все попадает в свои места.
Я правильно мыслю, что при повторном прогоне нужно сначала сохранить ответы, потом очистить список и только потом снова в него писать,
иначе будет 1 длинный список и данные сохраняться в одну строку, а не в 2 (для 2х посылок) ?

Как-то так.
П.С. Вижу, что код ужался, пропали пробелы. У меня все более-менее по pep8
Т.к. ветка все еще активна, то буду заглядывать несколько раз в день. Еще раз извиняюсь за отсутствие.

Отредактировано Puten (Янв. 11, 2016 21:15:38)

Офлайн

#3 Янв. 11, 2016 18:39:20

Z_M
Зарегистрирован: 2016-01-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись и редактирование данных в excel - Python

Эх, наврал: Altium умеет в html BOM-report делать, но некрасивый, и наши его не используют.

py.user.next
А зачем тебе данные в MySQL? Делай все данные в Excel
Кесарю - кесарево. Что-то хорошо там, что-то здесь
py.user.next
Нужно купить пакет программ
Нет: OpenOffice (LibreOffice) спокойно откроет excel файлы.
py.user.next
а у остальных оно как обновится?
Так не всегда это надо. Вот например: есть отчет для 1шт чего-то и N - кол-во штук. И вот для разных N генери разные отчеты. А в excel добавил ячейку = *N. Плюс готовый поиск, сортировка.

Офлайн

#4 Янв. 11, 2016 18:43:05

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Запись и редактирование данных в excel - Python

Z_M
Нет: OpenOffice (LibreOffice) спокойно откроет excel файлы.
Только вот в MS Office после правок в LibreOffice слетает форматирование.



Офлайн

#5 Янв. 11, 2016 18:44:44

Z_M
Зарегистрирован: 2016-01-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись и редактирование данных в excel - Python

Puten
Сейчас пробую приделать гуи через PyQt4
Ну … здесь нам не по пути. Я часть своего кода по-позже выложу, так чтоб, кому интересно, могли использовать.

Офлайн

#6 Янв. 11, 2016 19:06:49

Puten
Зарегистрирован: 2016-01-06
Сообщения: 40
Репутация: +  2  -
Профиль   Отправить e-mail  

Запись и редактирование данных в excel - Python

Z_M
Нет: OpenOffice (LibreOffice) спокойно откроет excel файлы.
FishHook
Только вот в MS Office после правок в LibreOffice слетает форматирование.
Парни, не нужно спорить, пакет офис 2003 -2007 установлен на все компы, так что эксель формат всем устраивает.

Все равно, в чем хранить данные, лишь бы быстро и без лишних телодвижений можно было бы открыть (например, зайти на веб страницу (нужен mysql?) или автоэкспорт из .csv в .xls / .xlsx через vba?).

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

П.С. Попозже доработаю код на странице тут. Пробелы все слетели. Как их можно оставить? При редактировании все видно, при сохранении пробелы пропадают.

Отредактировано Puten (Янв. 11, 2016 20:51:20)

Офлайн

#7 Янв. 11, 2016 19:49:04

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Запись и редактирование данных в excel - Python

Puten
Пробелы все слетели. Как их можно оставить?

Ссылки на гист, пастебин

Формат все-таки csv, а не xlsx?



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#8 Янв. 11, 2016 21:00:00

Puten
Зарегистрирован: 2016-01-06
Сообщения: 40
Репутация: +  2  -
Профиль   Отправить e-mail  

Запись и редактирование данных в excel - Python

ajib6ept
Формат все-таки csv, а не xlsx?
Да, на данный момент сохраняет в .csv.
Но так как csv без форматирования выглядит не очень (нужно импортировать данные в эксель, разделяя запятой), то или выбрать другой формат сохранения или сделать кнопку “Экспорт в эксель”.

Офлайн

#9 Янв. 11, 2016 21:16:55

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Запись и редактирование данных в excel - Python

FishHook
Только вот в MS Office после правок в LibreOffice слетает форматирование.
Не соглашусь. Правда мой опыт ограничивается вордом. Обычно для сложных документов
После правки в ворде - либра открывает долго и некорректно (в пятой
стало получше), часто вылетает по памяти.
После правки в либре - ворд падает, почти наверняка (касается версий с 7 по 13).

Puten
Если эту софтинку перенести на другой комп позже, то снова устанавливать питон?

Это прятанье головы в песок. Питон все равно будет установлен cx_freeze, но будет заархивирован и будут выброшены некоторые пакеты. Сделайте дистрибутив и всем будет до лампочки один там файл или 100.
Чтобы вас успокоить замечу, C# требует нужную версию net, java - javaruntime, даже сишные программы требуют наличия текущего рантайма. Так что установка питона это то, что делают и во всех других языках.
На мой взгляд с cx_freeze у вас будет гораздо больше головной боли, чем при установке python+ ваш пакет.

По поводу кода.
Совершенно непонятно в какой момент данные приходят со сканера.

ниже вольный перевод вашего кода.

import os
import datetime
import yaml# may be ConfigParser
#import subprocess as sp
fnm='post.csv'
file_exists = os.path.exists(fnm) # для проверки существования есть функция
with open(fnm,"a") as f: 
    if not file_exists:
        f.write("DATUM / TIJD\tTRACKINGSNUMMER\tAANTAL PAKKETTEN\tGETEKEND DOOR\tPOST\n")
   # sp.check_call("notepad cfg.yaml",shell=1) # конфиг можно подредактировать редактором
    with open("cfg.yaml","r") as cfg: 
        data=yaml.load(cfg)
    data.insert(0,datetime.datetime.now()) # почти всегда лучше брать формат времени по умолчанию
    f.write("\t".join(map(str,data)))
    f.write("\n")

пример конфига
- 3       # Scan the TRACKINGNUMBER
- 3       # AMOUNT of packets
- Arrived # Which POST
- Anrey   # WHO scans

Ваши сообщения в консоль практически не имеют смысла. Может только приветствие имеет смысл.



Отредактировано doza_and (Янв. 11, 2016 21:20:33)

Офлайн

#10 Янв. 11, 2016 22:10:03

Puten
Зарегистрирован: 2016-01-06
Сообщения: 40
Репутация: +  2  -
Профиль   Отправить e-mail  

Запись и редактирование данных в excel - Python

doza_and
то прятанье головы в песок. Питон все равно будет установлен cx_freeze, но будет заархивирован и будут выброшены некоторые пакеты. Сделайте дистрибутив и всем будет до лампочки один там файл или 100.
В курсе, как работает cx_Freeze, но итоговый вариант выглядит неплохо. Пихать лишний софт на каждый комп не очень удобно. Плюс, если кому показать, как программа работает на данный момент, опять же, не нужно сначала устанавливать питон.

В какую сторону копать, чтобы собрать свой мобильный дистрибутив? Не совсем понял, что имеется в виду.

doza_and
По поводу кода.
Совершенно непонятно в какой момент данные приходят со сканера.

В цикле:
for question in QUESTIONS:
print(question) # тут берется вопрос из кортежа
answers.append(input()) # тут, после каждого вопроса, добавляется ответ пользователя (со сканера) в список

Решение, скорее всего, не правильное, но пока придумал так. Вопрос - ответ сохраняем, след. вопрос - снова сохраняем.

doza_and
import os
import datetime
import yaml# may be ConfigParser
#import subprocess as sp
fnm='post.csv'
file_exists = os.path.exists(fnm) # для проверки существования есть функция
with open(fnm,“a”) as f:
if not file_exists:
f.write(“DATUM / TIJD\tTRACKINGSNUMMER\tAANTAL PAKKETTEN\tGETEKEND DOOR\tPOST\n”)
# sp.check_call(“notepad cfg.yaml”,shell=1) # конфиг можно подредактировать редактором
with open(“cfg.yaml”,“r”) as cfg:
data=yaml.load(cfg)
data.insert(0,datetime.datetime.now()) # почти всегда лучше брать формат времени по умолчанию
f.write(“\t”.join(map(str,data)))
f.write(“\n”)
Если формат времени оставляю по умолчанию, то он мне выдает “2016-01-11 21:01:56.311618”, что не удобно от слова совсем. Формат “Sat 09 Jan 2016 11:05” подгонял под себя.
doza_and
Ваши сообщения в консоль практически не имеют смысла. Может только приветствие имеет смысл.
Поясните, если не трудно? У меня 4 вопроса и консоль ожидает 4 ответа. Что не так?

Про .yaml не понял.

with open("cfg.yaml","r") as cfg: 
data=yaml.load(cfg)
data.insert(0,datetime.datetime.now()) # почти всегда лучше брать формат времени по умолчанию
f.write("\t".join(map(str,data)))
f.write("\n")
Что с ним делать?

Если меняю ваш пример на :
with open("cfg.yaml", "r") as cfg:
        data = yaml.load(cfg)
    answers.insert(0, datetime.datetime.now())
    f.write("\t".join(map(str, answers)))
    f.write("\n")
То все работает, но yaml нужно вручную создавать ('r' стоит).

Ваш пример сейчас попробую. Спасибо за отзыв.

Отредактировано Puten (Янв. 11, 2016 22:44:36)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version