Каковы некоторые" основные " легкие альтернативы для хранения файлов.формат csv? [дубликат]

этот вопрос уже есть ответ здесь:

Я на проекте, который сильно способствует использованию .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-хороший вариант, если вам нужны реляционные возможности запросов.