Python: make a list generator JSON serializable

后端 未结 4 1563
旧巷少年郎
旧巷少年郎 2020-12-29 05:23

How can I concat a list of JSON files into a huge JSON array? I\'ve 5000 files and 550 000 list items.

My fist try was to use jq, but it looks like jq -s is not opt

4条回答
  •  一生所求
    2020-12-29 06:06

    Based on the accepted answer, here is the StreamArray I eventually went for. It contains two lies:

    1. The suggestion that self.__tail__ might be immutable
    2. len(StreamArray(some_gen)) is either 0 or 1

    .

    class StreamArray(list):
    
        def __init__(self, gen):
            self.gen = gen
    
        def destructure(self):
            try:
                return self.__head__, self.__tail__, self.__len__
            except AttributeError:
                try:
                    self.__head__ = self.gen.__next__()
                    self.__tail__ = self.gen
                    self.__len__ = 1 # A lie
                except StopIteration:
                    self.__head__ = None
                    self.__tail__ = []
                    self.__len__ = 0
                return self.__head__, self.__tail__, self.__len__
    
        def rebuilt_gen(self):
            def rebuilt_gen_inner():
                head, tail, len_ = self.destructure()
                if len_ > 0:
                    yield head
                for elem in tail:
                    yield elem
            try:
                return self.__rebuilt_gen__
            except AttributeError:
                self.__rebuilt_gen__ = rebuilt_gen_inner()
                return self.__rebuilt_gen__
    
        def __iter__(self):
            return self.rebuilt_gen()
    
        def __next__(self):
            return self.rebuilt_gen()
    
        def __len__(self):
            return self.destructure()[2]
    

    Single use only!

提交回复
热议问题