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

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

25.06.2024, 12:52. Показов 413. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru