Найти - Пользователи
Полная версия: Запись в CSV файл
Начало » Python для новичков » Запись в CSV файл
1 2 3
FishHook
Если задачу нельзя выполнить штатными офисными средствами (то что входит в компетенцию “пользователь ПК”) и нет специализированного средства, то это проблема прежде всего руководителя. Пусть нанимает программиста для решения проблемы, покупает ПО или доплачивает сотрудникам за компетенцию. Когда энтузиасты начинают решать проблемы производства собственными средствами, ничего хорошего из этого все равно не получится.
Rodegast
> в кодировке cp1251, а не Unicode - тогда Эксель все отображал корректно.

Попробуй в начало файла BOM записать.
https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%BA%D0%B5%D1%80_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2
exister
FishHook
Если задачу нельзя выполнить штатными офисными средствами (то что входит в компетенцию “пользователь ПК”) и нет специализированного средства, то это проблема прежде всего руководителя. Пусть нанимает программиста для решения проблемы, покупает ПО или доплачивает сотрудникам за компетенцию. Когда энтузиасты начинают решать проблемы производства собственными средствами, ничего хорошего из этого все равно не получится.

Ничего не стоит так философствовать. Вы пробовали найти такого специалиста? А я пробовал:
1) Обращаться к доступным Python разработчикам на LinkedIn
2) Просил помощи у знакомых разработчиков
3) Создавал на fl.ru проект и искал фрилансера

Никто не смог решить мою сверхсложную задачу: то оказывалось, что они не настолько квалифицированные, то с CGI не работают, то, говорят, эксель - говно, делаейте в MySQL. А мне нужно сделать в Эксель и никак иначе. Конечно, питон-разработчики из Google, наверное, справились бы, но у меня таких знакомых нет, так что вариант один: делать все самостоятельно, опираясь на подсказки форумчан.

JOHN_16
я знаю. Но дешевле сделать xlsx чем менеджерам объяснять и слушать их недовольство. Серьезно тут не техническая проблема…

Все верно. Файл в конечном итоге пойдет девочке-менеджеру, которая будет с ним работать. Для простых менеджеров проблема переименовать файл или решить что делать с RAR файлом, а значит ни о каких макросах и даже импорте данных через меню Экселя и речи быть не может!

Я вчера с этим 13 часов возился и сегодня на свежую голову быстро решил проблему с кодировкой.
Всего-то надо было файл на запись открыть в желанном для Экселя режиме cp1251

 with open(dataFile, 'a', newline='', encoding='cp1251') as csvfile:
И все, Эксель прекрасно отображает кириллицу.

Остался вопрос с тем, как данные разделять по столбцам. Сейчас жесточайше буду вникать в документацию, но если кто-то в теме, буду очень признателен за подсказку, т.к. сроки на сдачу уже горят.
FishHook
exister
вы неправильно ставите задачу
вот это вот всё что вы напридумывали - csv, CGI и прочее - это ерунда. Это не бизнес-задача, это вы взяли на себя не сою работу с самого начала и подстраиваете требования под свои умения. На таких условиях никто не будет с вами связываться. Сформируйте требования к программе, конкретно такие-то цели, такие-то результаты на основании таких-то манипуляций с такими-то физическими сущностями. А как это будет реализовано - не ваша забота.

Правильное ТЗ: реализовать систему учета товаров на складе для ООО “Вектор”.
Неправильное ТЗ: на основе моих трехлетних экспериментов с блокнотом и паинтом сделать не пойми что и не пойми для чего, главное оставить костяком системы блокнот и паинт, потому что я лучше знаю.
FishHook
exister
и вообще я не с вами беседовал а с Джоном
exister
FishHook

Большое спасибо за ваше мнение. Но мне кажется такие философские рассуждения стоит вести в соответствующей ветке. А мы сейчас в разделе “Python для новичков”, где Новички задают вопросы и надеются получить конкретные ответы, а не рассуждение в стиле “наймите крутого спеца, который за вас все сделает”.

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

Остался открытым вопрос о том, как данные разделять по столбцам.
FishHook
exister
Большое спасибо за ваше мнение. Но мне кажется такие философские рассуждения стоит вести в соответствующей ветке. А мы сейчас в разделе “Python для новичков”, где Новички задают вопросы и надеются получить конкретные ответы, а не рассуждение в стиле “наймите крутого спеца, который за вас все сделает”.

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

Цитату выше мне стоит расценивать как “философские рассуждения” или как “конкретные ответы”?
Не хочу задевать ваши чувства (постольку поскольку вы слишком обидчивая личность) но вам не кажется, что у вас слишком мало постов, чтобы указывать, что можно на этом форуме делать а чего нельзя? Это же просто невежливо.

exister
Решил проблему и со столбиками.

Оказалось, что столбики разделяются между собой знаком “;”. Так что методу записи нужно всего-то добавить параметр
  delimiter=';'

Всем спасибо за помощь!
py.user.next
exister
У меня CGI скрипт, я уже подключал Google Sheets, но этим вариантом пользоваться нельзя, т.к. скрипт исполняется около 3 секунд, что просто нереально долго и неприемлемо в случае, если одновременно несколько пользователей заполняют форму. Честно говоря, Экселевские библиотеки я не подключал, но уверен, что они будут такие же медленные, как Гугловские.
Я имел в виду, что ты будешь хранить на сервере данные в CSV, а при запросе пользователя на сервере из csv-данных будет формироваться xls-файл и пользователь его будет скачивать себе.

Тебе надо описать задачу, а то как-то непонятно, что ты делаешь, но выглядит оно не очень. Многопользовательская, одновременная работа с csv-файлом уже вызывает вопросы.

А с кодировкой - везде используют utf-8, но винда использует cp1251. Если ты будешь под винду подгонять кодировку, то там (в данных) рано или поздно появится символ, которого нет в cp1251 и это вызовет ошибку. Поэтому кодировку держат в виде utf-8, а в виндовую переводят только в тех местах, где это надо, где настроить кодировку нельзя.

По разделителю - ну так, CSV (Comma-Separated Values, где Comma означает “запятая”) является определённым форматом и винда его просто не придерживается, а фактически использует DSV (Delimiter-Separated Values), где разделитель может быть любым. Но питон свой якобы csv-модуль тоже снабдил параметром, через который можно обрабатывать dsv-файлы.

Ещё там есть правило одно: открывай csv-файлы в питоне в бинарном режиме, какая бы там кодировка ни была, так как это важно для концов строк. Если открываешь файл в текстовом режиме, концы строк могут преобразовываться, тогда как формат CSV требует определённых концов строк. Поэтому в бинарном режиме открываешь, а потом перекодируешь строки.

И поставь себе Linux, так как большая часть проблем не касается ни питона, ни CSV, - это всё чисто виндовые заморочки, которых в лине - ноль.
exister
py.user.next
Спасибо за инфу. Я работаю на сервере сразу, ошибки ловлю в лог файле.

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

Задача глобальная у меня такая:
- принимать AJAX запросы от множества юзеров (будут оставлять свои данные после прохождения веб-игры)
- эти данные обработать так, чтобы юзеры не повторялись (не было два юзера с одной почтой или телефоном) - это если получится по времени
- предоставить по итогу возможность в любой время в табличном виде получить данные пользователей

Я хочу решить эту задачу таким образом:
- CGI скрипт принимает данные
- данные пишутся в CSV файл
- когда манагер делает запрос, исполняется второй скрипт, который на основании CSV файла делает Экселевский файл (мне не нравится из-за виндовых кодировок) или импортит данные в Гугл Таблицу (тут все работает и с UTF8)

Завтра, 18 проект должен быть сдан.
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