String in Code aus Textfile ersetzen Schleife

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
LeoWW
User
Beiträge: 2
Registriert: Freitag 8. Oktober 2021, 13:32

Servus liebe Python-Community,
Ich bin neu hier und habe eine Frage für mein Projekt.
Ich habe einen request.post code und möchte mehrere strings in der data, die gepostet werden soll, nach jedem loop replacen.
Python soll dazu nach jedem loop aus einer text datei die strings ersetzen. Wie setze ich das am besten um?
Hier der bisherige code:

Code: Alles auswählen

import requests
from requests.structures import CaseInsensitiveDict

url = "https://api.nft-maker.io/UploadNft/api/projectid"

headers = CaseInsensitiveDict()
headers["accept"] = "text/plain"
headers["Content-Type"] = "application/json"

data = """
{
  "assetName": "string",
  "previewImageNft": {
    "mimetype": "image/png", 
    "fileFromIPFS": "string",
    "description": "string"
   }
  }
"""


resp = requests.post(url, headers=headers, data=data)

print(resp.status_code)
 


Es sollen nach jedem loop die strings description, fileFromIPFS und assetName ersetzt werden.

Falls solche Fragen hier keinen Platz finden, dann bitte ich um Entschuldigung.
Ich bin dankbar für jede Hilfe.
MFG Leonard :)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

data sollte als Datenstruktur statt string definiert werden. Dann kannst du trivial die Werte veraendern, und wieder ein Request machen.

Code: Alles auswählen

def post_nft(name, file_from_ipfs, description):
    data = {
         "assetName" : name,
         "previewImageNft": {
              "fileFromIPFS": file_from_ipfs,
              ....
          }
      }
    resp = requests.post(url, headers=headers, data=data)


for i in range(10):
    post_nft(f"name{i}", f"filename{i}", f"description{i}")
Das ist nur skizziert. Aber man muss eben bei requests.post kein String als data uebergeben, sonder kann gleich eine JSON-kompatible Datenstruktur angeben, die auch entsprechend einfach gebaut wird.
LeoWW
User
Beiträge: 2
Registriert: Freitag 8. Oktober 2021, 13:32

Okay, das klingt einleuchtend und hilft auf jeden Fall schon mal weiter, jedoch ist doch jetzt die data in der request.post nicht mehr definiert, oder? Zumindest wird mir das so ausgegeben. Ich möchte den ganzen code immer wieder im loop durchlaufen lassen, also als script. Ich muss die Parameter jedoch 4000 mal ändern und das ist händisch nicht so toll. Ich habe die ganzen Parameter untereinander in einer Textfile.
Derzeit sieht das so aus

Code: Alles auswählen

 with open ("name.txt", "r") as file:
    line = file.readlines()
    for assetName in line: 
Ich möchte jetzt aber, dass nach jedem loop die nächste Line aus der Text File genommen wird. Also am Ende 4000 mal ein anderer Parameter genutzt wurde.
Was fehlt da also noch, dass erst nachdem das script einmal durchläuft der Parameter geändert wird, sprich eine line weiter runtergerutscht wird?
MFG Leo :)
Sirius3
User
Beiträge: 18275
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du eine Fehlermeldung bekommst, musst Du uns schon den Code zeigen und auch die exakte Meldung, die Du bekommst.
Statt CaseInsensitiveDict benutze ein normales Wörterbuch für header. Die beiden Angaben werden aber auch automatisch genommen, müssen also gar nicht explizit angegeben werden.
Antworten