Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 06.10.2021
Сообщений: 3

Проблема записи данных пользователей

25.06.2024, 12:52. Показов 390. Ответов 0

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Пишу телеграм-бота с использованием telebot. Есть необходимость в подсчёте кол-ва пользователей, который воспользовались ботом за определённое время. Для этого использую функцию в теле бота а также скрипт, который заносит данные о пользователе и предоставляет к ним доступ.
Проблема в том, что когда я использую бота, данные и использованные команды в файл csv записываются, но данные о других пользователях - нет. Может ли быть проблема в функции или скрипте, или же мне нужно разбираться с доступом бота к csv файлу?

Функция:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@bot.message_handler(content_types=['text'])
def handle_text(message):
    command = message.text.split()[0] 
    tg_analytic.statistics(message.chat.id, command)
 
    if command.lower() == 'статистика':
        st = message.text.split(' ')
        if 'txt' in st or 'тхт' in st:
            tg_analytic.analysis(st, message.chat.id)
            with open('%s.txt' % message.chat.id, 'r', encoding='UTF-8') as file:
                bot.send_document(message.chat.id, file)
            tg_analytic.remove(message.chat.id)
        else:
            messages = tg_analytic.analysis(st, message.chat.id)
            bot.send_message(message.chat.id, messages)
Добавлено через 37 секунд
Скрипт:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import csv
import datetime
import os
import pandas as pd
 
allowed_commands = ['/start', '/hello', '/main', 'situation_1', 'situation_2', 'situation_3', 'situation_4', 'thanks']
 
users_type = {
    1: 'пользователь',
    2: 'пользователя',
    3: 'пользователя',
    4: 'пользователя'
}
day_type = {
    1: 'день',
    2: 'дня',
    3: 'дня',
    4: 'дня'
}
 
def remove(user_id):
    path = os.getcwd() + '/%s.txt' % user_id
    os.remove(path)
 
def statistics(user_id, command):
    data = datetime.datetime.today().strftime("%Y-%m-%d")
    if command in allowed_commands:
        with open('data.csv', 'a', newline="", encoding='UTF-8') as fil:
            wr = csv.writer(fil, delimiter=';')
            wr.writerow([data, user_id, command])
 
def analysis(bid, user_id):
    season = int(bid[1])
    df = pd.read_csv('data.csv', delimiter=';', encoding='utf8')
    number_of_users = len(df['id'].unique())
    number_of_days = len(df['data'].unique())
 
    message_to_user = 'Статистика использования бота за %s %s: \n' % (season, day_type.get(season, 'дней'))
    message_to_user += 'Всего статистика собрана за %s %s: \n' % (number_of_days, day_type.get(season, 'дней'))
    if season > number_of_days:
        season = number_of_days
        message_to_user += 'Указанное вами количество дней больше, чем имеется\n' \
                           'Будет выведена статистика за максимальное возможное время\n'
 
    df_user = df.groupby(['data', 'id']).count().reset_index().groupby('data').count().reset_index()
    list_of_dates_in_df_user = list(df_user['data'])
    list_of_number_of_user_in_df_user = list(df_user['id'])
    list_of_dates_in_df_user = list_of_dates_in_df_user[-season:]
    list_of_number_of_user_in_df_user = list_of_number_of_user_in_df_user[-season:]
    df_command = df[df['command'].isin(allowed_commands)].groupby(['data', 'command']).count().reset_index()
    unique_commands = df_command['command'].unique()
    commands_in_each_day = []
    list_of_dates_in_df_command = list(df_command['data'])
    list_of_number_of_user_in_df_command = list(df_command['id'])
    list_of_name_of_command_in_df_command = list(df_command['command'])
    commands_in_this_day = dict()
    for i in range(len(list_of_dates_in_df_command)):
        commands_in_this_day[list_of_name_of_command_in_df_command[i]] = list_of_number_of_user_in_df_command[i]
        if i + 1 >= len(list_of_dates_in_df_command) or list_of_dates_in_df_command[i] != list_of_dates_in_df_command[
            i + 1]:
            commands_in_each_day.append(commands_in_this_day)
            commands_in_this_day = dict()
    commands_in_each_day = commands_in_each_day[-season:]
 
    if 'пользователи' in bid:
        message_to_user += 'За всё время бота использовало: ' + '%s' % number_of_users \
                           + ' %s ' % users_type.get(number_of_users, 'пользователей') + '\n' \
                                                                                         'Пользователей за последние %s %s: \n' % (
                               season, day_type.get(season, 'дней'))
        for days, number, comm_day in zip(list_of_dates_in_df_user, list_of_number_of_user_in_df_user,
                                          commands_in_each_day):
            message_to_user += 'Дата:%s Количество:%d Из них новых:%s\n' % (days, number, comm_day.get('/start', 0))
    if 'команды' in bid:
        message_to_user += 'Статистика команд за последние %s %s: \n' % (season, day_type.get(season, 'дней'))
        for days, commands in zip(list_of_dates_in_df_user, commands_in_each_day):
            message_to_user += 'Дата:%s\n' % days
            for i in unique_commands:
                if i in commands:
                    message_to_user += '%s - %s раз\n' % (i, commands.get(i))
                else:
                    message_to_user += '%s - 0 раз\n' % i
 
    if 'txt' in bid or 'тхт' in bid:
        with open('%s.txt' % user_id, 'w', encoding='UTF-8') as fil:
            fil.write(message_to_user)
            fil.close()
    else:
        return message_to_user
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2024, 12:52
Ответы с готовыми решениями:

Проблема записи данных в БД
Зачитываю данные из АД (ФИО пользователя, департамент, кабинет и пр.) и пытаюсь поместить эти данные в БД на MYSQL. Таблица сделана с...

Web-форма + База Access, проблема с автообновлением данных у пользователей
Доброго дня. Вопрос следующий: Есть локальная сеть, написал web-интерфейс на C#, который подгружает данные из базы Access, есть...

Проблема записи данных
Добрый день. Есть веб-приложение из которого, при нажатии на кнопку, формируется некий список в MS Excel (по шаблону) из данных, хранимых в...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.06.2024, 12:52
Помогаю со студенческими работами здесь

Проблема при записи данных на microSD
Всем привет! Программирую на микроконтроллере Atmega2560. Записываю показания АЦП на SD карточку. В качестве библиотеки использую Petit...

Проблема при добавлении записи в базу данных
Здравствуйте! Помогите разобраться со следующей проблемой: Пытаюсь добавить в базу запись двумя способами: при помощи...

Проблема при вводе данных - "Для обеспечения целостности данных необходимо наличие связанной записи в таблице"
Помогите пожалуйста со связями в таблицах. Перепробовал все варианты, но пишет "Невозможно добавление или изменение записи. Для...

Проблема с записью значение записи из JTable в базу данных
На форме имеется jTable, значения в который добавляются из базы по нажатии кнопки (добавление работает, с базы считывает) В базе такие...

Структурированные типы данных. Тип данных записи. Имена полей записи. Оператор присоединения with.
Помогите плиз с задачей.... ---------------- Составить программу расчета выплаты зарплаты работникам предприятия. Имена работников...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru