Вообще с такими задачами иди на фриланс. Но я сегодня добрый, дам небольшой стартер.
import csv
import json
# описываем преобразования типов
noop = lambda s: s #неизвестные поля оставляем строкой
transforms = {
#"FileName": str, #что нужно оставить строкой, можно не указывать
"terse_version_3": int,
"fio_version": str,
"jobname": str,
"read_runtime_ms": int,
# и так далее, для каждого поля
}
data = [] #список с данными из csv
with open('source.csv', 'rt', encoding='utf-8', newline='') as csvfile:
reader = csv.DictReader(csvfile, delimiter=';')
#грузим строки из csv файла как словари
#первая строка файла определит имена колонок!
#настройки формата csv (разделитель и всё такое) - см. справку питона
for row in reader:
transformed_row = {}
for key, value in row.items():
transform = transforms.get(key, noop) #как преобразовывать?
try:
# преобразовываем строку в значение
transformed_row[key] = transform(value)
except: #что ты хочешь сделать с некорректными значениями?
transformed_row[key] = ""
data.append(transformed_row)
#структура данных готова, осталось сдампить в JSON
#если нужно вывести в файл
with open('result.json', 'wt', encoding='utf-8') as dst:
json.dump(data, dst, ensure_ascii=False)
#если нужна именно строка
data_str = json.dumps(data, ensure_ascii=False)
Python Новичок, sqlite3 встроен в питон, и тебе при переносе скрипта на другое место достаточно будет скопировать файл с базой данных.
Тогда как mysql требует отдельного mysql сервера, и перенос БД - дело не вполне тривиальное.
Для начала sqlite3 всё же удобнее. Но если ожидаешь больших объемов (миллионы строк) то тогда да, sqlite брать не стоит.
Учить SQL тебе придётся самому всё равно.
Anton, я фз какой рабочий каталог у бота на хероку.
Но я точно знаю, что sys.argv[0] хранит путь к скрипту.
Так что используя os.path.dirname() + os.path.combine() или их аналоги из pathlib, можно переделать этот путь в путь до нужного файла.
И тогда не важно какой рабочий каталог, неважно, по какому пути лежит скрипт - если положение файла относителньо скрипта неизменно, он будет найден.
aftnia11, см. выше. Ты можешь либо вручную изменять значение q_Stream, либо, что проще, не закрывать FirstStream.txt, а читать из него построчно. Всё равно файл отслеживает текущую позицию чтения.
qqqZXzz123,
"ну дык, ёлы палы"
Там же строки не как есть на обучение передаются, а как коды символов, так?
Значит, нужно дополнять целочисленным кодом выбранного "мусорного" символа. Да хоть нулем.
wirflve, а откуда я знаю, что ты пытаешься сделать? Приведенная программа работает как и должна, а если ты ожидал другого - потрудись описать решаемую задачу. Ну или подумай сам.
SwatXX, а, я не обратил внимание.
Вообще лучше не делать вот такое:
import telebot
from telebot import InlineKeyboardMarkup
from telebot import types
А просто сделать import telebot, и далее обращаться к нужным частям, например, telebot.types.InlineKeyboardMarkup.
Следует учитывать, что этот запрос неудачно работает в ситуации, когда таблица есть, но её структура отличается от заданной. Запрос молча не сработает, не сообщив о расхождении - и ошибка проявится только при обращении к таблице.
а) Задавать время в кортеже в UTC.
б) Если нужно задавать локальное время, посмотри в сторону класса datetime.timezone и параметра tzinfo в конструкторе datetime.datetime.
Я бы сказал, тебе нужно создать timezone, соответствующий локальному времени и использовать его для конструирования объекта datetime.
Затем вызываешь для этого объекта метод .astimezone(tz=datetime.timezone.utc), и получишь время в UTC, соответствующее заданному в начале. Оттуда уже проще, хотя бы через тот же метод .timetuple()
Ну, теперь понятно, что нужен интент на сведения о ролях и пользователях сервера. К слову, по ссылке выше прочитай параграф "Privileged intent" - некоторые интенты нужно включить в настройках учетки бота.
bubnaz, просто помести вызов randint() внутрь обработчика команды?
Тебе и список-то не нужен для этого, просто присвой результат вызова randint() какой-нибудь переменной, и подставь её в строку как выше.
Вообще возникает вопрос, если ты не знаешь питон, зачем хватаешься за ботов? Это не такая простая тема.
Тебя подводит вот этот вот print(repr(e)). repr() не даёт полной информации об исключении, только о типе и сообщении - но не о traceback, т.е. о месте возникновения. Замени вызов на traceback.print_exc().
Тогда можно будет понять, какая операция терпит неудачу, и подумать, какие интенты нужны для этой операции.
Дорабатывай и отлаживай сам.