Ограничить библиотечное ограничение объектов в python
Я использовал полку для хранения тонны объектов таким образом:
словарь со строками в качестве ключа и списка в качестве значения:
т.е.
data["MITL"] = ["Radio And Television Broadcasting And Communications Equipment", "Communication Equipment"]
или более лаконично:
... SIXH.L Machine Tools & Accessories, GOPAIST.BO Steel & Iron, HERITGFOO.NS Food Wholesale, MITL Radio And Television Broadcasting And Communications Equipment, Communication Equipment, MMLP Oil Refining, Marketing, Oil & Gas Pipelines, SESL.PA Diversified Electronics, ... <≈ 30,000 entries>
Я извлек из этого .db-файла и экспортировал его в другой .db-файл, так что отрасль – это ключи, а список состоит из символов запаса.
... Industrial Electrical Equipment ['PLPC', 'MAG', 'LPTH', 'IIN', 'CUI', 'ULBI', 'APWC', 'CAPC', 'SVT', 'ARTX', 'CPST', 'OSIS', 'LGL', 'BW', 'HPJ', 'AOS', 'FLUX', 'AMSC', 'GTI', 'RTBC', 'AUSI', 'AETI', 'AIMC', 'HYGS', 'BLDP', 'HOLI', 'NPWZ', 'LIME', 'ESNC', 'ZBB', 'CSTU', 'AXPW', 'GBLL', 'EMR', 'BDC', 'BNSO', 'ENS', 'REFR', 'ABAT', 'FELE', 'CYLU', 'XIDEQ', 'LYTS', 'GAI', 'AMOT', 'CUI.V', 'LSCG'] Toy & Hobby Stores ['BBW'] Distribution ['MNST', 'FMX', 'STZ', 'FIZZ', 'BREW', 'THST', 'LBIX', 'ROX', 'COKE', 'KOF', 'PEP', 'COT', 'REED', 'SAM', 'MGPI', 'DPS', 'CCE', 'BORN', 'KO', 'BUD', 'CCU', 'WVVIP', 'TAP', 'WVVI', 'DEO', 'ABEV', 'VCO'] Home Health Care ['AFAM', 'SCAI', 'ADUS', 'AMED', 'LHCG', 'BIOS', 'CHE', 'HASC'] ... <≈ 300 entries>
Файл прекрасно пишет, насколько я могу судить, он извлекает данные, которые являются моей проблемой.
Из документации: «База данных также (к сожалению) зависит от ограничений dbm, если она используется – это означает, что (маринованное представление) объекты, хранящиеся в базе данных, должны быть довольно маленькими, а в редких случаях – ключевыми столкновениями может заставить базу данных отказаться от обновлений ».
Но я не могу найти никакой информации об ограничениях dbm , даже с документацией. Причина должна быть в том, что списки, которые я храню как значения, слишком велики.
Вот фрагмент кода:
industriesAndTheirStocks = shelve.open("industriesAndTheirStocks") print(len(industriesAndTheirStocks)) # just to make a point at how many keys there are, proving it's the size of the lists stored that contains the issue for industry in industriesAndTheirStocks: # fails here because 'industriesAndTheirStocks' can't be iterated through, because it sent a negative number as the size to __iter__ print("{:<15}".format(industry), end="") print(industriesAndTheirStocks[industry])
и ошибка / вывод:
374 Traceback (most recent call last): File "read_from_shelve_stock_industry_file.py", line 144, in <module> if __name__ == "__main__":main() File "read_from_shelve_stock_industry_file.py", line 128, in main display_shelve_contents_by_industry() File "read_from_shelve_stock_industry_file.py", line 42, in display_shelve_contents_by_industry for industry in industriesAndTheirStocks: File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/shelve.py", line 95, in __iter__ for k in self.dict.keys(): SystemError: Negative size passed to PyBytes_FromStringAndSize Process finished with exit code 1
Я видел, что у других людей есть проблемы, которые приводят к одной и той же ошибке, но они использовали версии Python до 7.4.1, и я думаю, что их ошибка имела другую причину. Вопрос о модуле Python
Итак, мои вопросы:
Каковы ограничения dbm?
Есть ли способ исправить наличие больших объектов (словарей, содержащих большие списки в качестве значения) в полке?
Если нет, то какой способ хранения данных лучше, если я не хочу хранить его в ОЗУ? (что является целью использования Shelve, я думаю)
- Изменение переменных среды из сценария Python
- виджет доступа по имени виджета / окна Tk
- Отображение строки в список пар
- Перестроить строки в столбцы в кадре данных pandas
- Идиоматический способ struct.unpack от BytesIO?
- Моделирование катания на кубиках Python
- Пакеты «внутри» модулей
- custom dict, который позволяет удалять во время итерации
- Как использовать асинхронные методы?
- должен ли я снова установить python для модуля zlib?
- в этом примере Семафора, необходимо ли блокировать refill () и buy ()?
- Как я могу повторно воспроизвести образец звука, чтобы следующий цикл совпадал с предыдущим
- Сброс текущей цепочки исключений
- Запустите программу Python без установки необходимых модулей