Цикл по именам файлов с Python - PullRequest
0 голосов
/ 30 января 2020

У меня есть 200 файлов, которые я хочу изменить с помощью Python с именами "1. json", "2. json", "3. json" ... и я пытаюсь создать все oop чтобы открыть и изменить их. Мне не удалось сделать это с "для я в диапазоне (1, 200):", поэтому я попытался следующим образом.

myList = {"1.json", "2.json", "3.json"}
for toImport in myList:
    with open("path1" + toImport) as f:
        json_response = json.load(f)


for data in json_response:
    try:
        for special_issue in data["specific_issues"]:
            for x in special_issue["bills_by_algo"]:
                resulting_data.append(({"id": x["id"], "committees": x["committees"]}))

    except KeyError as e:
        print(e, "not found in entry.")
        continue

b = pd.DataFrame(resulting_data)
print(b)
b.to_csv(r"path2" +toImport)

Теперь он больше не выдает сообщение об ошибке, но файлы не экспортируется ... Что мне поменять?

Ответы [ 4 ]

1 голос
/ 30 января 2020

Ошибка отступа, как указано в других ответах. Но код не очень хорош, так как вам придется перечислять все файлы вручную. Вот более полное решение, которое зацикливается на папке и обрабатывает только JSON файлы:

import os

folder = os.path.join('.', 'path/to/data')

for r, d, f in os.walk(folder):
    for file in f:
        if '.json' in file:
            with open(file) as f:
                # do things with f
1 голос
/ 30 января 2020

Произошла ошибка отступа. Попробуйте это:

import pandas as pd
myList = {'1.json', '2.json', '3.json'}
for toImport in myList:
    with open('path'+toImport) as f:
        json_response = json.load(f)
1 голос
/ 30 января 2020

После вашего редактирования я должен отредактировать ответ:

Я полагаю, вам нужно сделать отступ для всего кода обработки ваших ответов для for l oop, поскольку json_response перезаписывается после каждой итерации.

myList = {"1.json", "2.json", "3.json"}
for toImport in myList:

    with open("path1" + toImport) as f:
        json_response = json.load(f)

    resulting_data = []
    for data in json_response:
        try:
            for special_issue in data["specific_issues"]:
                for x in special_issue["bills_by_algo"]:
                    resulting_data.append(
                        ({"id": x["id"], "committees": x["committees"]})
                    )

        except KeyError as e:
            print(e, "not found in entry.")
            continue

    b = pd.DataFrame(resulting_data)
    print(b)
    b.to_csv(r"path2" + toImport)


Старый ответ перед редактированием вопроса:

У вас небольшая ошибка SyntaxError, потому что ваш код ниже for ... должен иметь отступ.

import pandas as pd
import json

myList = {"1.json", "2.json", "3.json"}
for toImport in myList:
    with open("path" + toImport) as f:
        json_response = json.load(f)
1 голос
/ 30 января 2020

Просто сделайте отступ в последних двух строках.

Python требует отступа кодовых блоков. В этом случае, так как вы хотите использовать предложение with в l oop, вы захотите, чтобы оно содержало отступ вместе с его зависимостями

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