Ich schreibe ein kleines Skript, das eine CSV-Schleife durchläuft, jede Zeile in der Datei als Wörterbuch speichert und dieses Wörterbuch an eine API in einer .sv sendet 1-dimensionale Liste.Python: Erstellen Sie Listen gleicher Größe aus einer Datei mit beliebiger Größe
import csv
import requests
with open('csv.csv', 'rU') as f:
reader = csv.reader(f, skipinitialspace=True)
header = next(reader)
for row in reader:
request = [dict(zip(header, map(str, row)))]
r = requests.post(url, headers = i_headers, json = request)
print str(reader.line_num) + "-" + str(r)
Die request
Liste sieht wie folgt aus etwas:
[
{
"id": "1",
"col_1": "A",
"col_2": "B",
"col_3": "C"
}
]
Dieses Skript funktioniert, aber ich bin Looping durch eine 8.000.000 Reihe .csv, und diese Methode ist einfach zu langsam. Ich möchte diesen Prozess beschleunigen, indem ich mehr als eine Zeile pro API-Aufruf sende. Mit der API, mit der ich arbeite, kann ich bis zu 100 Zeilen pro Anruf senden.
Wie kann ich dieses Skript ändern, um inkrementell Listen mit 100 Wörterbüchern zu erstellen, diese an die API zu senden und dann zu wiederholen. Eine Probe von dem, was ich zu diesem API aussenden würde, würde so aussehen:
[
{
"id": "1",
"col_1": "A",
"col_2": "B",
"col_3": "C"
},
{
"id": "2",
"col_1": "A",
"col_2": "B",
"col_3": "C"
},
...
...
...
{
"id": "100",
"col_1": "A",
"col_2": "B",
"col_3": "C"
}
]
Eine Sache, die nicht funktionieren wird eine massive Liste zu erstellen und es dann in n Listen der Größe partitionieren 100. Der Grund weil meine Maschine nicht alle diese Daten zu einem bestimmten Zeitpunkt im Speicher halten kann.
Partitionierung der Liste –