Ошибка типа: ожидаемый объект str, bytes или os.PathLike, а не _io.TextIOWrapper - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь открыть, прочитать, изменить и закрыть файл json, используя приведенный ниже пример:

Как добавить значение ключа в данные JSON, извлеченные из файла с Python?

import os
import json

path = '/m/shared/Suyash/testdata/BIDS/sub-165/ses-1a/func'
os.chdir(path)

string_filename = "sub-165_ses-1a_task-cue_run-02_bold.json"

with open ("sub-165_ses-1a_task-cue_run-02_bold.json", "r") as jsonFile:
    json_decoded = json.load(jsonFile)

json_decoded["TaskName"] = "CUEEEE"

with open(jsonFile, 'w') as jsonFIle:
    json.dump(json_decoded,jsonFile) ######## error here that open() won't work with _io.TextIOWrapper

В конце я получаю сообщение об ошибке (с open(jsonFile...), что я не могу использовать переменную jsonFile с open(). Я использовал точный формат в качестве примера, приведенного в ссылке выше, поэтому я не конечно, почему это не работает. Это в конечном итоге происходит в более крупном сценарии, поэтому я хочу держаться подальше от жесткого кодирования / использования строк для имени файла json.

1 Ответ

0 голосов
/ 11 июня 2019

Этот вопрос немного стар, но для тех, у кого такая же проблема:

Вы правы, вы не можете открыть переменную jsonFile. Это указатель на другой файл подключения и открытия хочет строку или что-то подобное. Стоит отметить, что jsonFile также должен быть закрыт после выхода из блока «with», поэтому на него нельзя ссылаться за пределами этого.

Чтобы ответить на вопрос, хотя:

with open(jsonFile, 'w') as jsonFIle:
   json.dump(json_decoded,jsonFile)

должно быть

with open(string_filename, 'w') as jsonFIle:
    json.dump(json_decoded,jsonFile)

Вы можете видеть, что нам просто нужно использовать ту же строку, чтобы открыть новое соединение, а затем мы можем присвоить ему тот же псевдоним, который мы использовали для чтения файла, если захотим. Лично я предпочитаю, чтобы in_file и out_file были явными о моих намерениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...