Использовать malloc. Все проверки типа возврата не являются нулевыми, если это значение равно нулю, то ваша система просто не имеет достаточной памяти, чтобы соответствовать многим значениям.
Там sqlite3
, включенный в python. С его помощью вы можете создать базу данных ( в памяти ) и добавлять в нее строки, а также выполнять SQL-запросы.
Если вам нужна аккуратная функциональность, подобная ActiveRecord, вам следует добавить внешний ORM, например sqlalchemy . Это отдельная загрузка, хотя
Быстрый пример использования sqlalchemy:
from sqlalchemy import create_engine, Column, String, Integer, MetaData, Table
from sqlalchemy.orm import mapper, create_session
import csv
CSV_FILE = 'foo.csv'
engine = create_engine('sqlite://') # memory-only database
table = None
metadata = MetaData(bind=engine)
with open(CSV_FILE) as f:
# assume first line is header
cf = csv.DictReader(f, delimiter=',')
for row in cf:
if table is None:
# create the table
table = Table('foo', metadata,
Column('id', Integer, primary_key=True),
*(Column(rowname, String()) for rowname in row.keys()))
table.create()
# insert data into the table
table.insert().values(**row).execute()
class CsvTable(object): pass
mapper(CsvTable, table)
session = create_session(bind=engine, autocommit=False, autoflush=True)
Теперь вы можете запрашивать базу данных, фильтровать по любому полю и т. Д.
Предположим, вы запускаете приведенный выше код на этом csv:
name,age,nickname
nosklo,32,nosklo
Afila Tun,32,afilatun
Foo Bar,33,baz
Это создаст и заполнить таблицу в памяти полями имя
, возраст
, ник
. Затем вы можете запросить таблицу:
for r in session.query(CsvTable).filter(CsvTable.age == '32'):
print r.name, r.age, r.nickname
Это автоматически создаст и запустит запрос SELECT
и вернет правильные строки.
Еще одно преимущество использования sqlalchemy состоит в том, что если вы решите использовать в будущем другую, более мощную базу данных, вы можете сделать это практически без изменения кода.
Используйте БД в библиотеке, например SQLite . Существуют версии Python и Ruby .
Загрузите ваш CSV-файл в таблицу, там могут быть модули / библиотеки, которые вам тоже могут помочь. Тогда SQL прочь.
Вы можете использовать любой язык сценариев для разбора CSV-файла и сохранения данных в SQLite, который просто использует один файл для хранения. Оттуда вы получаете базу данных и можете выполнять запросы к ней.
В качестве альтернативы на windows вы можете настроить источник данных ODBC как CSV-файл. Но это может быть трудно автоматизировать.
CSV-файлы не являются базами данных - у них нет индексов - и любое SQL-моделирование, которое вы им навязываете, было бы немногим большим, чем перебор всего этого файла снова и снова.
PHP FlatfileDB доступен здесь - очень хороший вариант, если вы создаете веб-приложение
Вы смотрели Perl и Text :: CSV и DBI? На CPAN есть много модулей для этого. Вот пример (из ЗДЕСЬ ):
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
# Connect to the database, (the directory containing our csv file(s))
my $dbh = DBI->connect("DBI:CSV:f_dir=.;csv_eol=\n;");
# Associate our csv file with the table name 'prospects'
$dbh->{'csv_tables'}->{'prospects'} = { 'file' => 'prospects.csv'};
# Output the name and contact field from each row
my $sth = $dbh->prepare("SELECT * FROM prospects WHERE name LIKE 'G%'");
$sth->execute();
while (my $row = $sth->fetchrow_hashref) {
print("name = ", $row->{'Name'}, " contact = ", $row->{'Contact'}. "\n");
}
$sth->finish();
name = Glenhuntly Pharmacy contact = Paul
name = Gilmour's Shoes contact = Ringo
Просто введите perldoc DBI и perldoc Text :: CSV в командной строке, чтобы узнать больше.