From 5021f1f8cb76404852034c039714d9bc20f0e589 Mon Sep 17 00:00:00 2001 From: Salvo 'LtWorf' Tomaselli Date: Sun, 7 Jun 2015 14:03:24 +0200 Subject: [PATCH] Use the insert() method to load files In this way, checks are performed automatically on every tuple and code is simplified. This should make it safer to raise exceptions on files that are not relations. --- relational/relation.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/relational/relation.py b/relational/relation.py index 2bb7332..076589a 100644 --- a/relational/relation.py +++ b/relational/relation.py @@ -22,6 +22,7 @@ import csv from itertools import chain, repeat +from collections import deque from relational.rtypes import * @@ -47,19 +48,14 @@ class relation (object): self.content = set() self.header = header([]) return - # Opening file - fp = open(filename) + with open(filename) as fp: + reader = csv.reader(fp) # Creating a csv reader + self.header = header(next(reader)) # read 1st line + self.content = set() + attributes = len(self.header) - reader = csv.reader(fp) # Creating a csv reader - self.header = header(next(reader)) # read 1st line - self.content = set() - - for i in reader: # Iterating rows - - self.content.add(tuple(map (rstring, i))) - - # Closing file - fp.close() + iterator = ((self.insert(i) for i in reader)) + deque(iterator, maxlen=0) def _make_writable(self): '''If this relation is marked as readonly, this