Каковы некоторые" основные " легкие альтернативы для хранения файлов.формат csv? [дубликат]
этот вопрос уже есть ответ здесь:
- альтернатива CSV? 3 ответы
Я на проекте, который сильно способствует использованию .CSV-файлы для хранения данных. Я вижу много проблем с использованием .КШМ, особенно для хранения реляционных данных. Разбор.csv обычно является боль, особенно при использовании назначение столбцов ad-hoc.
Я выступал за использование XML и минимальных баз данных, таких как SQLite, но я ищу альтернативы" быстрее, лучше, дешевле".
Каковы некоторые другие," основные " легкие альтернативы .csv файлов?
кроме того, как насчет CouchDB. Как он сравнивается с SQLite с точки зрения легкого веса?
EDIT: я пропустил его. Этот вопрос был задан до.
5 ответов
Я бы поспорил есть не является прямой заменой для файла CSV. CSV-это формат плоского файла, ориентированный на индекс. Не имеет значения, заменяете ли вы запятые на трубы или что-то еще. То же самое и с другими правилами.
с этим, как говорится, я часто выбираю SQLite, когда данные в моей власти.
используя SQLite последовательно одалживает к использованию такого же tooling, смогите быть использовано как или ad-hoc магазин или реляционная модель, имеет "step up" планирует "автономную" СУБД, предоставляет DQL "бесплатно" (что является большим плюсом для меня) и т. д. Если пространство не является реальной проблемой или нет поддержки для доступа к данным, почему бы и нет? (Современный Firefox также использует SQLite).
(существует ряд объектных баз данных, таких как DB4O, а также-или даже более простые иерархические хранилища ключей/значений и т. д. Не пытаясь сказать, что SQLite-единственный способ получить отношения в микро / встроенной базе данных.)
одной стороны говорят, XML-это то, что требуется специальный инструмент (sqlite / adapter). XML, хотя и не самый удобный для человека формат,можно редактировать в блокноте. Кроме того, в XML нет дополнительных накладных расходов (фрагментация или структура) помимо самой разметки/данных, и XML, как правило, вполне поддается сжатию. Существует также много библиотек для сопоставления всего графа объектов с XML (и, следовательно, поддержания отношений), так что это может быть хорошей функцией.
другие форматы, такие как JSON, также существуют -- но если формат непрозрачен, то это действительно не имеет значения по сравнению с XML (это скорее вопрос поддержки инструментов).
Так... "это зависит".
все дело в прецеденте.
мое эмпирическое правило: используйте SQLite, если есть зависимости или отношения между двумя частями данных; используйте CSV (или какой-либо другой "плоский" формат), если это просто плоские файлы данных. Самая простая вещь, которая просто работает, часто является самым надежным решением.
(Примечание: убедитесь, что CSV хорошо сформирован. Никому не нравится взломать плохие реализации CSV.)
похоже YAML относительно мал по сравнению с форматами, такими как XML, но немного более описателен, чем JSON (это надмножество). Я рассмотрю еще одного кандидата.
HDF5-хороший выбор для хранения больших табличных наборов данных, если вам не требуется одновременная запись.
В Python, панды + PyTables очень просты в использовании. Пример из панд документация:
In [259]: store = HDFStore('store.h5')
In [260]: print(store)
<class 'pandas.io.pytables.HDFStore'>
File path: store.h5
Empty
Objects can be written to the file just like adding key-value pairs to a dict:
In [261]: np.random.seed(1234)
In [262]: index = date_range('1/1/2000', periods=8)
In [263]: s = Series(randn(5), index=['a', 'b', 'c', 'd', 'e'])
In [264]: df = DataFrame(randn(8, 3), index=index,
.....: columns=['A', 'B', 'C'])
.....:
In [265]: wp = Panel(randn(2, 5, 4), items=['Item1', 'Item2'],
.....: major_axis=date_range('1/1/2000', periods=5),
.....: minor_axis=['A', 'B', 'C', 'D'])
.....:
# store.put('s', s) is an equivalent method
In [266]: store['s'] = s
In [267]: store['df'] = df
In [268]: store['wp'] = wp
# the type of stored data
In [269]: store.root.wp._v_attrs.pandas_type
Out[269]: 'wide'
In [270]: store
Out[270]:
<class 'pandas.io.pytables.HDFStore'>
File path: store.h5
/df frame (shape->[8,3])
/s series (shape->[5])
/wp wide (shape->[2,5,4])
XML предназначен для основной и relativey "легкий". JSON-еще один популярный выбор, но гораздо больше подходит для объектного моделирования, а не для хранения данных.
MySQL-хороший вариант, если вам нужны реляционные возможности запросов.