Python - используйте разные файлы .json и сделайте это с меньшим количеством кода данных [приложение]

Какой код наиболее эффективен / меньше для использования data[attach.] .json из этого кода:

with open('slack.json') as slackAttachment:
       data = json.load(slackAttachment)

with open('slack2.json') as slackAttachment:
       data2 = json.load(slackAttachment)

with open('slack3.json') as slackAttachment:
       data3 = json.load(slackAttachment)

with open('slack4.json') as slackAttachment:
       data4 = json.load(slackAttachment)


data["attachments"][0]["title"] = country  

itemname = item.get('Title', {})
if itemname: 
    newitemword = item['seoTitle']
    data["attachments"][0]["text"] = "" + newitemword + ""

else:

    data["attachments"][0]["fields"].append({
    "value": '*Item name not found*',
    "short": True,
})

Также есть не только эти два файла данных ["вложения"] [0], но и около xx из них.

В основном то, что я НЕ хочу делать, это:

 data["attachments"][0]["text"] = "" + newitemword + ""
 data2["attachments"][0]["text"] = "" + newitemword + ""
 data3["attachments"][0]["text"] = "" + newitemword + ""
 data4["attachments"][0]["text"] = "" + newitemword + ""

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

Обновлено:

webhook0 = 'HELLO'
webhook1 = 'WORLD
webhook2 = 'STACK'


       data = {}


                    file_numbers = range(0, 3)  # I assume the numbers are from 1 to 4, but you can change this.
                    for file_number in file_numbers:  # go overf file numbers
                        file_name = 'slack' + str(file_number) + '.json'  # create file name from number
                        with open(file_name) as slackAttachment:
                            data[file_number] = (json.load(slackAttachment))  # append file json to data list
                        webhook_number = 'webhook' + str(file_number)

                    print(webhook_number)

                    # data is now complete
                    # you can use data[file_number] to access the corresponding json

                    for file_number in file_numbers:
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете хранить все свои данные на одном dict.

data = {}

file_numbers = range(1, 5) # I assume the numbers are from 1 to 4, but you can change this.
for file_number in file_numbers: # go overf file numbers
    file_name = 'slack' + str(file_number) + '.json' # create file name from number

    with open(file_name) as slackAttachment:
        data[file_number] = (json.load(slackAttachment)) # append file json to data list

# data is now complete
# you can use data[file_number] to access the corresponding json

for file_number in file_numbers:

    data[file_number]["attachments"][0]["title"] = country

    itemname = item.get('Title', {})
    if itemname:
        newitemword = item['seoTitle']
        data[file_number]["attachments"][0]["text"] = "" + newitemword + ""

    else:

        data[file_number]["attachments"][0]["fields"].append({
            "value": '*Item name not found*',
            "short": True,
        })

каждый раз, когда вы хотите получить доступ к данным файла, вы используете data[<file_number>].

Итак, чтобы получить доступ к первому slack.json, вы используете data[0]

Можно ли добавить это в метод etc def slack ():? Как-то я попытался выяснить, но безуспешно!

CDNthe2nd 10.08.2018 14:53

Также написано range() does not take keyword arguments

CDNthe2nd 10.08.2018 14:58

какую версию Python вы используете?

Bruno Lubascher 10.08.2018 15:14

Пользуюсь 3.6 :)

CDNthe2nd 10.08.2018 15:15

Также я забыл упомянуть, что в конце есть response = s.post(webhook, data=json.dumps(data), headers = {'Content-Type': 'application/json'}). Как мне изменить данные в этом случае, чтобы отправлять каждый конкретный запрос?

CDNthe2nd 10.08.2018 15:16

Я отредактировал ассортимент, теперь надо работать. Везде, где у вас есть data, используйте вместо него data[file number]. Итак, response = s.post(webhook, data=json.dumps(data[file number]), headers = {'Content-Type': 'application/json'})

Bruno Lubascher 10.08.2018 15:19

Ой, ладно! Я попробую :)

CDNthe2nd 10.08.2018 15:20

Кажется, работает! Однако это та же проблема, где у меня теперь есть 3 разных веб-крючка вверху и т. д. Webhook0 = hello webhook1 = world webhook2 = stackoverflow, и все они имеют свое собственное значение. Как мне в этом случае распечатать каждое из этих значений. Я сделал `` webhook_number = 'webhook' + str (file_number) '', но это просто распечатало webhook0-1-2, но не фактическое значение в них

CDNthe2nd 10.08.2018 15:39
webhooks = {1: 'hello', 2: 'world', 3:'stackoverflow'}; for file_number in file_numbers: print(webhooks[file_number])
Bruno Lubascher 10.08.2018 15:47

Другие вопросы по теме