Почему данные удаляются после 600-ой или 700-ой строки в файле suggested_photos.csv при импорте? Как исправить эту проблему?
Для избежания потери данных при записи в коде телеграм бота можно использовать резервное копирование данных перед записью, регулярно сохранять данные и проверять их целостность, а также обрабатывать возможные ошибки записи данных. Потеря данных после 600-ой или 700-ой строки в файле suggested_photos.csv при импорте может быть связана с ограничением на количество строк или объем файла, ошибкой в коде, отсутствием прав доступа или недостаточным объемом памяти. Для исправления этой проблемы можно увеличить лимит на количество строк или объем файла, оптимизировать код для более эффективной записи данных, проверить и исправить возможные ошибки в коде, а также проверить доступ к файлу и наличие достаточного объема памяти.
Читаем доки .
Синхронный телебот по умолчанию выполняет обработчики в пуле потоков, чтобы один медленный обработчик не ставил колом всего бота. Как следствие, ты ловишь т.н. состояние гонки, когда несколько обработчиков (или несколько копий одного обработчика), работающих в разных потоках, одновременно обращаются к одному ресурсу - например, к твоему словарю suggested_photos, или к файлу, или ещё к чему. Косяки при этом могут возникать самые весёлые - и, что самое неприятное, они будут то появляться, то исчезать в зависимости от порядка исполнения потоков.
Так что либо пробуй отключать многопоточность параметром конструктора Telebot (ссылку на доки я дал), либо разбирайся, как писать многопоточные приложения - например, защищая глобальные ресурсы бота мьютексом.
Также можешь попробовать перейти на асинхронный вариант телебота, но там нужно понимать как вообще устроены асинхронные приложения.
Предлагаю прочитать ошибку:
import csv def save_data(photos): try: with open('suggested_photos.csv', 'a', newline='') as file: fieldnames = ['file_id', 'photo_id', 'username', 'user_id', 'editor_id', 'message_id', 'status', 'timestamp'] writer = csv.DictWriter(file, fieldnames=fieldnames) writer.writeheader() for file_id, media_data in photos.items(): writer.writerow({ 'file_id': file_id, 'photo_id': media_data.get('photo_id', ''), 'username': media_data.get('username', ''), 'user_id': media_data.get('user_id', ''), 'editor_id': media_data.get('editor_id', ''), 'message_id': media_data.get('message_id', ''), 'status': media_data.get('status', ''), 'timestamp': media_data.get('timestamp', ''), }) except Exception as e: print("Error saving data:", e)