2017-02-07 20 views
0

Я пытался открыть несколько файлов JSon сразу затем записать их обратно в Python с этим кодом, но его дает мне сообщение об ошибке:Нет файла JSON не может быть расшифрованы, но если я открыть конкретное имя файла, которое работает

ValueError: No JSON object could be decoded 

код:

def get_children(node): 
    for child in node['children']: 
    yield child 
     for grandchild in get_children(child): 
     yield grandchild 

cell_info= open('/Users/massess/Desktop/assignment/cellinfo.text', 'w') 

dir_path = '/Users /massess /Desktop /assignment /json'  
    for filename in os.listdir(dir_path): 
    cell_info.write("%s" %(filename)) 
     f = open(os.path.join(dir_path,filename), 'r') 
     data = json.load(f) 

     #prints the root node 
cell_info.write("%s\t%s\t%s\t%s\t%s\n" (data["CellName"],data["Event"], data["Minutes (E)"], data["X (E)"], data["Y (E)"])) 

# prints all children of the root node 
for child in get_children(data): 
    cell_info.write("%s\t%s\t%s\t%s\t%s\n" %(child["CellName"],  child["Event"], child["Minutes (E)"], child["X (E)"], child["Y (E)"])) 

cell_info.close() 

Однако, когда я использую этот код, чтобы открыть один конкретный файл JSON, это работает!

f = open('path\\to\\.json', 'r') 
data = json.load(f) 

Спасибо за вашу помощь, заранее

+0

Исправьте углубление. Это важно в Питоне. И почему в дорожках есть места? –

+0

Можете ли вы исправить отступы в опубликованном коде? 'os.listdir' перечисляет подкаталоги, а также файлы. Вы можете использовать файл 'os.path.isfile', чтобы отфильтровать их. Этот каталог также содержит файлы, отличные от json? Должны ли файлы json следовать шаблону, например, заканчиваться на .json? Если да, возможно, 'glob.glob (" yourpath/*. Jsoin ")' является лучшим выбором. В любом случае распечатайте имя файла, которое не работает, и посмотрите на это. – tdelaney

+0

@tdelaney Я пробовал оба из того, что вы сказали, а затем он дает мне ту же ошибку такая же ошибка, когда я пытаюсь решить любое решение, я также исправил отступ –

ответ

0

Помимо отступа еще разбитого, вы могли бы добавить print(f.name) перед вызовом json.load(), чтобы увидеть, какой файл вызывает ошибку. Это может дать вам намек на проблему.

Для проверки правильности содержимого файла JSON у вас может быть checked by a linter. dtk