Запись Python в последний файл, но не в первый

#python #json #python-3.x #discord.py

#python #json #python-3.x #discord.py

Вопрос:

Python, похоже, не записывает в мой первый файл, но делает это для второго (и последнего).

Я пишу discord-бота, который принимает идентификатор гильдии и использует их в качестве имен файлов, для каждой гильдии мне нужен файл json, содержащий переменные для этой конкретной гильдии.

Все было хорошо, пока я не смог найти какое-либо возможное решение этой проблемы:

     Task exception was never retrieved
future: <Task finished name='Task-13' coro=<twitchGet() done, defined at C:UsersPedroDesktopPythondiscord_streambot.py:82> exception=JSONDecodeError('Expecting value: line 1 column 1 (char 0)')>
Traceback (most recent call last):
  File "C:UsersPedroDesktopPythondiscord_streambot.py", line 87, in twitchGet
    values = await getJsonValues(guild.id)
  File "C:UsersPedroDesktopPythondiscord_streambot.py", line 79, in getJsonValues
    jsonInfo = json.load(File)
  File "C:UsersPedroAppDataLocalProgramsPythonPython39-32libjson__init__.py", line 293, in load
    return loads(fp.read(),
  File "C:UsersPedroAppDataLocalProgramsPythonPython39-32libjson__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "C:UsersPedroAppDataLocalProgramsPythonPython39-32libjsondecoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:UsersPedroAppDataLocalProgramsPythonPython39-32libjsondecoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
 

Теперь я, к счастью, знаю, как читать, и могу определить, что проблема заключается в том, что функция json.load() пытается загрузить пустой файл json, но моя функция записи json, похоже, не имеет никаких проблем, кто-нибудь знает, что не так, или другой способ записи функции? Повторяю, функция записывает второй (и на данный момент последний) файл, но не первый

 def createDefaultFile(id: int):

    writeToFile = {
        'delay' : TIMEDELAY,
        'streamers' : [],
        'textchannel' : None,
    }

    file = Path(str(id) '.json')

    if file.is_file():
        print('File Exists n')
    else:
        print('Creating File n')
        open(str(id) '.json','a').close()
        with open(str(id)   '.json', 'w', encoding ='utf8') as json_file:
            json.dump(writeToFile, json_file)
 

Редактировать:
Как и было запрошено, строка 87 discord_streambot.py

 #Check if there are streamers set
count = 0
for guild in bot.guilds:
    values = await getJsonValues(guild.id)
    for streamer in values['streamers']:
        count  = 1
 

Функция getJsonValues:

 async def getJsonValues(id: int):
    try:
        File = open(str(id) '.json','w ')
    except IOError:
        print('Cannot open file')
        return None
    jsonInfo = json.load(File)
    return jsonInfo
 

Комментарии:

1. Я бы с удовольствием помог. Однако я не думаю, что у меня есть все части головоломки. Вы сказали, что это так trying to load an empty json file . Не должно ли этого быть? Сначала это заполняется где-то еще? Пожалуйста, предоставьте более подробную информацию. Ваш код в строке 87 discord_streambot.py будет необходим, чтобы помочь вам (я полагаю). Рад помочь

2. Файл json не должен быть пустым, он должен быть загружен с параметрами по умолчанию в writeToFile dict, я добавлю запрошенный вами код, если это поможет

3. Прежде чем позвонить jsonInfo = json.load(File) , не могли бы вы print(File) ? Кроме того, не рекомендуется называть переменные с первой буквой в верхнем регистре. Он сообщает людям, что переменная является классом.

4. Я буду применять эту практику в будущем. Вывод следующий: <_io.TextIOWrapper name='402169002732027924.json' mode='w ' encoding='cp1252'>

Ответ №1:

Пожалуйста, распечатайте содержимое вашего файла JSON, я не могу быть уверен, не глядя на это, однако я считаю, что ваша проблема в том, что файл JSON пуст. Пожалуйста, сначала запишите это в файл JSON: {} Затем повторите попытку. Если это не сработает, распечатайте содержимое JSON и ответьте на этот ответ, чтобы я мог помочь вам в дальнейшем.

Комментарии:

1. Файлы json не являются проблемой, проблема заключается в коде, связанном с их созданием, некоторые файлы имеют содержимое, а другие нет, я, кажется, не понимаю, почему это происходит

Ответ №2:

Проблема, с которой я столкнулся, заключалась в функции getJsonValues в строке

 File = open(str(id) '.json','w ')
 

По-видимому, ‘w ‘ возился с файлом, делая его пустым каждый раз, когда я запускал функцию, изменил его на ‘r’, поскольку ‘w ‘ не был необходим, и это решило проблему. В любом случае спасибо