SORU
30 Temmuz 2011, CUMARTESİ


Ben ne kadar tembel Python dosyasını/akışı birden fazla JSON nesneleri okuyabilir miyim?

Python dosyasını/akışı birden fazla JSON nesneleri okumak, bir seferde bir tane istiyorum. Ne yazık ki json.load() .read()dosya sonu gelene kadar s; tek bir nesne okuma ya da tembel nesneler üzerinde yineleme için kullanmak için herhangi bir yolu var gibi görünmüyor.

Bunu yapmak için herhangi bir yolu var mı? Standart kütüphaneyi kullanmak ideal olacaktır, ama eğer üçüncü parti bir kütüphane varsa, bunun yerine kullanmak istiyorum.

Şu an ayrı bir hat üzerinde her nesne koyarak ve json.loads(f.readline()) kullanıyorum ama bunu yapmak zorunda değil tercih ederim.

Örnek Kullanın

example.py

import my_json as json
import sys

for o in json.iterload(sys.stdin):
    print("Working on a", type(o))

in.txt

{"foo": ["bar", "baz"]} 1 2 [] 4 5 6

örnek oturum

$ python3.2 example.py < in.txt
Working on a dict
Working on a int
Working on a int
Working on a list
Working on a int
Working on a int
Working on a int

CEVAP
30 Temmuz 2011, CUMARTESİ


JSON genellikle artan kullanımı bu tür için çok iyi değil, kolay bir sürü ayrıştırma olmadan bir kerede yüklü olabilir, böylece birden çok nesne serialise için standart bir yolu yok.

Kullandığınız hat başına çözüm nesneyi başka yerlerde de görülür. Scrapy çağrıları 'JSON hatları':

Biraz daha Pythonically yapabilirsiniz:

for jsonline in f:
    yield json.loads(jsonline)   # or do the processing in this loop

Bu en iyi yolu, herhangi bir üçüncü parti kütüphaneler almaz olduğunu düşünüyorum, ve kolay ne olduğunu anlamak için. Ben kendi kod bazı olarak kullandım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Helder Barreto

    Helder Barre

    22 Mayıs 2006
  • krotoflik

    krotoflik

    26 ŞUBAT 2011
  • The Fashion Sight

    The Fashion

    22 AĞUSTOS 2011