Python help

Discussion in 'Automated Trading' started by zentrader, Jun 5, 2006.

  1. I want to learn a little programming and have decided to start with Python.

    As a first step I would like read a csv file containing date/open/high/low/close into an array or list. I've searched the python docs and google and can't find any code examples i can get started with.

    Any tips to point me in the right direction appreciated.
     
  2. lrm

    lrm

    zentrader,

    I'm no python expert, but I think something like the following will get you going. Please note, I put periods in instead of spaces for the tabs since the forum would strip the leading spaces. Also, I attached the source file to the message.
    ----

    file = open('c:\somefile.csv', 'r')

    lineStr = file.readline()

    while lineStr:
    ........# pieces will be an array with your individual components in it
    ........pieces = lineStr.split(',')
    ........lineStr = file.readline()
     
  3. Here's some code I had lying around which parses Yahoo historical data in csv format. It does some rudimentary error checking.

    I used < pre > tag to get a fixed width font but it seems to double space the lines. Anyone know a better way?

    Martin
    <pre>
    def ReadCsv(csvFileName):
    # read in data file
    try:
    csvFile = open(csvFileName)
    csvData = [line.strip().split(",") for line in csvFile.readlines()]
    csvFile.close()
    except IOError:
    return []

    # check for HTML file (bad data)
    if len(csvData) >= 2 and '404 Not Found' in csvData[1][0]:
    return []

    # extract lines with dates only, and get rid of adjusted close
    return [line[0:6] for line in csvData if len(line[0].split("-"))==3]
    </pre>
     
  4. Python resources:

    Mark Pilgrim's "Dive into Python" is a good tutorial which is available online here:

    http://diveintopython.org/toc/index.html

    "Python in a Nutshell" by Alex Martelli isn't available online, but it covers all the bases. Well worth owning. I have a few Python books but this is the only one I use regularly.

    Martin
     
  5. Use the
    Code:
     tag
     
  6. Thanks for the help guys. I will play around with the code and go through that help doc and I should be able to work it out.
     
  7. I want to end up with 5 arrays titled Date/Open/High/Low/Close. I can't work out how to achieve this using readline or the CSV module. I am sure there must be some simple code for this?
     
  8. Code:
    dateList = openList = highList = lowList = closeList = []
    for (date,open,high,low,close,vol) in ReadCsv(csvFileName):
        dateList.append(date)
        openList.append(open)
        highList.append(high)
        lowList.append(low)
        closeList.append(close)
    
    Haven't tested it but it should work.

    Another way using list comprehensions:

    Code:
    results = ReadCsv(csvFileName)
    dateList = [d for (d,o,h,l,c,v) in results]
    openList = [o for (d,o,h,l,c,v) in results]
    # and so forth
    
    I would encourage you to spend some time learning the fundamental Python language constructs. Learning by doing is great, but starting with a good tutorial is probably a good idea.

    Martin

    p.s. Thanks dcraig!
     
  9. Thanks for the help guys, working perfectly now.
     
    #10     Jun 8, 2006