Yüz binlerce JSON kaydını 1MB'lık MAX veri yükleme sınırı olan bir sunucuya gönderiyorum. Kayıtlarım, birkaç yüz bayttan birkaç yüz bine kadar çok değişken boyutta olabilir. Daha sonra sunucuya gönderilir. Şu anda çalışıyor, ama bir jsonlanmış dizeye toSend sabit damping gerçekten ağır ve neredeyse% 100 çok fazla gibi görünüyor, ancak başka bir şekilde yapmak için bir yol bulamıyorum. Ayrı ayrı yeni kayıtların birleştirilmesi ve birlikte neler olacağının bir taksimi ile birlikte olur muyum?Python: Sunucuya göndermek için json dizesinin boyutunu sınırlama
Eminim bunu yapmanın daha temiz bir yolu olmalı, ama bilmiyorum.
Verilen her türlü yardım için teşekkür ederiz.
Bu
sendToServer doğru sonuç veren öğeleri göstermek için sadece bir kukla fonksiyondur (Sadece netlik ve tamamlanması için gönderme, aşağıda @rsegal aynı zamanda onunla geldi, şimdi kullanıyorum cevaptır),import pickle
import json
f = open("userProfiles")
rows = pickle.load(f)
f.close()
bytesPerMB = 1024 * 1024
comma = ","
appendSize = len(comma)
def sendToServer(obj):
#send to server
pass
def checkSize(numBytes):
return numBytes >= bytesPerMB
def jsonDump(obj):
return json.dumps(obj, separators=(comma, ":"))
leftover = []
numRows = len(rows)
rowsSent = 0
while len(rows) > 0:
toSend = leftover[:]
toSendSize = len(jsonDump(toSend))
leftover = []
first = len(toSend) == 0
while True:
try:
row = rows.pop()
except IndexError:
break
rowSize = len(jsonDump(row)) + (0 if first else appendSize)
first = False
if checkSize(toSendSize + rowSize):
leftover.append(row)
break
toSend.append(row)
toSendSize += rowSize
rowsSent += len(toSend)
postData = jsonDump(toSend)
print "assuming to send '{0}' bytes, actual size '{1}'. rows sent {2}, total {3}".format(toSendSize, len(postData), rowsSent, numRows)
sendToServer(postData)
HA! Etrafta oynarken, neredeyse aynı çözümde neredeyse var. Sınırın üzerinde boyut gönderecek ve 'toSendLength', 'len (json.dumps (toSend)') - len (",") 've' tentativeLength 'olmalıdır. 'len (json.dumps (row)) + len (",") çünkü her yeni satırda bir virgül ve boşluk da eklenecektir. Teşekkürler rsegal! – seaders
Ve aslında bunun üstüne, her iki json dökümüne "biraz daha değerli verilerden tasarruf etmek için" separators = (',', ':') "ekledim! – seaders
Bu senin için çalışmış sevindim! Python'un JSON ile olan ilişkilerinin ayrıntılarını benden daha iyi biliyorsunuz. Tekrar ilerleme kaydediyor gibi görünüyorsun ve belki de bu gelecekte birilerine yardım edecek. Süper havalı! – rsegal