В вашем вопросе упоминается JSON. Итак, я обратился к этому. Дайте мне знать, если это поможет.
import json
import os
import glob
import pprint
keywordList = []
path = '/Users/Me/Api/downloaded'
for filename in glob.glob(os.path.join(path, '*.json')): #only process .JSON files in folder.
with open(filename, encoding='utf-8', mode='r') as currentFile:
data=currentFile.read().replace('\n', '')
keyword = json.loads(data)["keytolookup"]
if keyword not in keywordList:
keywordList.append(keyword)
pprint(keywordList)
РЕДАКТИРОВАТЬ примечание : обновленное изменение ответа для цикла по сравнению с первоначальным ответом:
for filename in os.listdir(path)
OP упомянутой версии глоба работает лучше. Это тоже было в качестве альтернативы.
Я могу порекомендовать использовать FMDB в качестве красивой оболочки Cocoa SQLite.
Вне моей головы:
Возможно, не только для iPhone, но и для встроенных устройств. Здесь есть несколько полезных советов .
Эта ссылка относится к старая версия SQLite, но все еще оказывается полезной.
Наконец, этот вопрос стека также содержит некоторую полезную информацию.
В настоящее время мы используем SQLite с приложением .Net Compact Framework, и его производительность фантастическая, и мы ' Я потратил немного времени на оптимизацию, но не настолько, насколько мы могли бы.
Удачи.
Измерьте объем памяти, занимаемый вашим приложением, и найдите утечки в инструментах. Затем попробуйте это после вызова sqlite3_exec с:
pragma cache_size = 1
и / или
pragma synchronous = 0
YMMV. Есть отчеты о повышении производительности, значительном сокращении использования ОЗУ и меньшем количестве утечек. Однако будьте осторожны при внесении корректировок, не осознавая воздействия (например, синхронный
отключает промывку, что значительно ускоряет работу, но может вызвать повреждение базы данных, если телефон был выключен и снова выключен в неправильное время) .
Подробнее здесь: http://www.sqlite.org/pragma.html
Я обнаружил, что часто быстрее просто получить идентификатор I ' я ищу в сложном запросе, а затем получаю остальную информацию по запросу.
Так, например:
SELECT person_id
FROM persons
WHERE (complex where clause)
, а затем, когда отображается каждый человек, я запускаю
SELECT first_name, last_name, birth_date, ...
FROM persons
WHERE person_id = @person_id
Я обычно нахожу, что это усложняет запрос выполняется за половину времени, и поиск для данного человека обычно составляет порядка 2 мс (это для таблиц с 17 тыс. строк).
Ваш опыт может отличаться, и вы должны рассчитывать время самостоятельно.
Также , http://www.vimeo.com/4421498 .
На самом деле я широко использую шаблон гидратации / дегидратации из sqlitebooks, который является расширенным набором этой техники.
Еще один вариант, который я еще не пробовал, это Core Data (должен быть разработчиком Apple iphone), хотя это функция версии 3.0, поэтому от вашего приложения зависит, будет ли это вариант.
Я ленив и люблю как можно больше придерживаться основного кода, поэтому мне нравится инструмент ORM SQLitePersistentObjects:
http://code.google.com/p/sqlitepersistentobjects /
Вы заставляете объекты вашей модели предметной области унаследовать от SQLitePersistentObject (хорошо, немного навязчиво), а затем вы можете сохранять / извлекать ваши объекты по мере необходимости.
Для сохранения:
[person save];
Загрузить его обратно почти так же просто. К любому устойчивому объекту добавляются методы динамического класса, позволяющие выполнять поиск. Итак, мы могли бы получить все объекты Person с фамилией «Смит» следующим образом:
NSArray *people = [PersistablePerson findByLastName:@"Smith"];
PLDatabase - это альтернатива FMDB: http://code.google.com/p/pldatabase/
Я без проблем использовал ее в одном из моих проектов.