/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/Model/table.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/Model/table.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1371 by bh, Fri Jul 4 18:19:16 2003 UTC revision 1662 by bh, Wed Aug 27 13:51:01 2003 UTC
# Line 132  class DBFTable(TitledObject, OldTableInt Line 132  class DBFTable(TitledObject, OldTableInt
132      # work because a DBF file object buffers some data      # work because a DBF file object buffers some data
133    
134      def __init__(self, filename):      def __init__(self, filename):
135          self.filename = filename          self.filename = os.path.abspath(filename)
136    
137          # Omit the extension in the title as it's not really needed and          # Omit the extension in the title as it's not really needed and
138          # it can be confusing because dbflib removes extensions and          # it can be confusing because dbflib removes extensions and
# Line 187  class DBFTable(TitledObject, OldTableInt Line 187  class DBFTable(TitledObject, OldTableInt
187          """          """
188          return self.column_map.has_key(col)          return self.column_map.has_key(col)
189    
190      def ReadRowAsDict(self, row):      def RowIdToOrdinal(self, gid):
191          """Return the entire row as a dictionary with column names as keys"""          """Return the row ordinal given its id
192    
193            Since for DBFTables the row id is the row number, return the
194            value unchanged.
195            """
196            return gid
197    
198        def RowOrdinalToId(self, num):
199            """Return the rowid for given its ordinal
200    
201            Since for DBFTables the row id is the row number, return the
202            value unchanged.
203            """
204            return num
205    
206        def ReadRowAsDict(self, row, row_is_ordinal = 0):
207            """Return the entire row as a dictionary with column names as keys
208    
209            The row_is_ordinal is ignored for DBF tables because the row id
210            is always the row number.
211            """
212          return self.dbf.read_record(row)          return self.dbf.read_record(row)
213    
214      def ReadValue(self, row, col):      def ReadValue(self, row, col, row_is_ordinal = 0):
215          """Return the value of the specified row and column          """Return the value of the specified row and column
216    
217          The col parameter may be the index of the column or its name.          The col parameter may be the index of the column or its name.
218    
219            The row_is_ordinal is ignored for DBF tables because the row id
220            is always the row number.
221          """          """
222          return self.dbf.read_record(row)[self.column_map[col].name]          return self.dbf.read_record(row)[self.column_map[col].name]
223    
# Line 331  class MemoryTable(TitledObject, OldTable Line 354  class MemoryTable(TitledObject, OldTable
354          """Return the number of rows in the table"""          """Return the number of rows in the table"""
355          return len(self.data)          return len(self.data)
356    
357      def ReadValue(self, row, col):      def RowIdToOrdinal(self, gid):
358            """Return the row ordinal given its id
359    
360            Since for MemoryTables the row id is the row number, return the
361            value unchanged.
362            """
363            return gid
364    
365        def RowOrdinalToId(self, num):
366            """Return the rowid for given its ordinal
367    
368            Since for MemoryTables the row id is the row number, return the
369            value unchanged.
370            """
371            return num
372    
373        def ReadValue(self, row, col, row_is_ordinal = 0):
374          """Return the value of the specified row and column          """Return the value of the specified row and column
375    
376          The col parameter may be the index of the column or its name.          The col parameter may be the index of the column or its name.
377    
378            The row_is_ordinal is ignored for DBF tables because the row id
379            is always the row number.
380          """          """
381          return self.data[row][self.column_map[col].index]          return self.data[row][self.column_map[col].index]
382    
383      def ReadRowAsDict(self, index):      def ReadRowAsDict(self, index, row_is_ordinal = 0):
384          """Return the entire row as a dictionary with column names as keys"""          """Return the entire row as a dictionary with column names as keys
385    
386            The row_is_ordinal is ignored for DBF tables because the row id
387            is always the row number.
388            """
389          return dict([(col.name, self.data[index][col.index])          return dict([(col.name, self.data[index][col.index])
390                        for col in self.columns])                        for col in self.columns])
391    
# Line 465  def _find_dbf_column_names(names): Line 511  def _find_dbf_column_names(names):
511    
512      return name_map      return name_map
513    
514  def table_to_dbf(table, filename):  def table_to_dbf(table, filename, rows = None):
515      """Create the dbf file filename from the table"""      """Create the dbf file filename from the table.
516        
517        If rows is not None (the default) then it must be a list of row
518        indices to be saved to the file, otherwise all rows are saved.
519        """
520    
521      dbf = dbflib.create(filename)      dbf = dbflib.create(filename)
522    
523      dbflib_fieldtypes = {FIELDTYPE_STRING: dbflib.FTString,      dbflib_fieldtypes = {FIELDTYPE_STRING: dbflib.FTString,
# Line 486  def table_to_dbf(table, filename): Line 537  def table_to_dbf(table, filename):
537          dbf.add_field(name_map[col.name], dbflib_fieldtypes[col.type],          dbf.add_field(name_map[col.name], dbflib_fieldtypes[col.type],
538                        width, prec)                        width, prec)
539    
540      for i in range(table.NumRows()):      if rows is None:
541            rows = range(table.NumRows())
542    
543        recNum = 0
544        for i in rows:
545          record = {}          record = {}
546          for key, value in table.ReadRowAsDict(i).items():          for key, value in table.ReadRowAsDict(i).items():
547              record[name_map[key]] = value              record[name_map[key]] = value
548          dbf.write_record(i, record)          dbf.write_record(recNum, record)
549            recNum += 1
550      dbf.close()      dbf.close()
551    
552  def table_to_csv(table, filename):  def table_to_csv(table, filename, rows = None):
553      """Export table to csv file."""      """Export table to csv file.
554        
555        If rows is not None (the default) then it must be a list of row
556        indices to be saved to the file, otherwise all rows are saved.
557        """
558    
559      file = open(filename,"w")      file = open(filename,"w")
560      columns = table.Columns()      columns = table.Columns()
# Line 505  def table_to_csv(table, filename): Line 565  def table_to_csv(table, filename):
565          header = header + "\n"          header = header + "\n"
566          file.write(header)          file.write(header)
567    
568          for i in range(table.NumRows()):          if rows is None:
569                rows = range(table.NumRows())
570    
571            for i in rows:
572              record = table.ReadRowAsDict(i)              record = table.ReadRowAsDict(i)
573              if len(record):              if len(record):
574                  line = "%s" % record[columns[0].name]                  line = "%s" % record[columns[0].name]

Legend:
Removed from v.1371  
changed lines
  Added in v.1662

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26