hyena wrote: > Hi, > Just jump in python few days. I am wondering how to store and index a > table in python effectively and easily.I think the basic data types are not > very straight foward to handle a table (eg, from csv or data base.) > > I have a csv file, the first row of it is column names and the rest rows > are data. There are some tens of columns and hundreds rows in the file. I am > planning to use the column names as variables to access data, currently I am > thinking of using a dictionary to store this file but did not figure out a > elegant way to start. > > Any comments and suggestions are wellcomed. Please forgive me if this > question is too naive , and yes, I did search google a while but did not > find what I want. > > Thanks > > One way would be to store each row as a dictionary. Suppose your data file is called "myfile.txt" and, for simplicity, that columns are separated by whitespace. Please note the following code is untested.
f = open("myfile.txt", "r") names = file.next().split() So now names contains a list of the field names you want to use. Let's store the rows in a dictionary of dictionaries, using the first column to index each row. rows = {} for line in file: cols = line.split() rdict = dict(zip(names, cols)) rows[cols[0]] = rdict dict(zip(names, cols)) should create a dictionary where each field is stored against its column name. I assume that cols[0] is unique for each row, otherwise you will suffer data loss unless you check for that circumstance. You can check this kind of thing in the interactive interpreter: >>> names = ["first", "second", "third"] >>> dict(zip(names, [1, 2, 3]) ... ) {'second': 2, 'third': 3, 'first': 1} >>> Another alternative, however, would be to create an object for each row where the columns are stored as attributes. This approach would be useful if the column names are predictable, but rather less so if each of your data files were to use different column names. Let us know and if appropriate someone can point you at the "bunch" class. Welcome to Python! regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype: holdenweb http://del.icio.us/steve.holden --------------- Asciimercial ------------------ Get on the web: Blog, lens and tag the Internet Many services currently offer free registration ----------- Thank You for Reading ------------- -- http://mail.python.org/mailman/listinfo/python-list