|   | 1 |  initial version  | 
Here is a solution for the "same" problem, designed but as i would design the process:
& as separator, so that i may try to insert the result in there...Code:
import traceback
SEPARATOR     = ';'          # or ',' or ' & ' or ...
SEPARATOR_IN  = ';'          # or ',' or ' & ' or ...
SEPARATOR_OUT = '\n    &'    # or ',' or ' & ' or ...
END_OUT       = '\\\\\n'     # or simply '\n'
inFileName  = r"/home/dan/temp/in1234.csv"
outFileName = r"/home/dan/temp/out1234.csv"
def f(u):
    return latex( sin( u/180 *pi ) )
def printOut( x,y, outStream, sep=SEPARATOR ):
    z = x+y
    outList = [ r"%s^\circ" % x ,
                r"%s^\circ" % y ,
                r"%s^\circ" % z ,
                f(x) ,
                f(y) ,
                f(z) , ]
    outStream.write( sep.join( [ str(entry) for entry in outList ] ) + END_OUT )
inStream  = open(  inFileName, 'r' )    # open for read
outStream = open( outFileName, 'w' )    # open for write
for line in inStream:
    print "... parsing %s" % line
    try:
        x, y = line.strip().split( SEPARATOR_IN )[:2]
        x, y = ZZ(x), ZZ(y)
        printOut( x, y, outStream, sep=SEPARATOR_OUT )
    except Exception:
        traceback.print_exc()
inStream.close()
outStream.close()
Use corresponding separators for the own needs. My input file has the lines:
15;30
12;24
30;45
60;90
72;120
6;18;
and i use the German separator, the semicolon. Redefine the separator(s) for the own needs.
The output is like this, rather designed to be inserted into a latex document, inside of an array block:
15^\circ
    &30^\circ
    &45^\circ
    &\frac{1}{4} \, \sqrt{6} - \frac{1}{4} \, \sqrt{2}
    &\frac{1}{2}
    &\frac{1}{2} \, \sqrt{2}\\
12^\circ
    &24^\circ
    &36^\circ
    &\sin\left(\frac{1}{15} \, \pi\right)
    &\sin\left(\frac{2}{15} \, \pi\right)
    &\frac{1}{4} \, \sqrt{-2 \, \sqrt{5} + 10}\\
30^\circ
    &45^\circ
    &75^\circ
    &\frac{1}{2}
    &\frac{1}{2} \, \sqrt{2}
    &\frac{1}{4} \, \sqrt{6} + \frac{1}{4} \, \sqrt{2}\\
60^\circ
    &90^\circ
    &150^\circ
    &\frac{1}{2} \, \sqrt{3}
    &1
    &\frac{1}{2}\\
72^\circ
    &120^\circ
    &192^\circ
    &\frac{1}{4} \, \sqrt{2 \, \sqrt{5} + 10}
    &\frac{1}{2} \, \sqrt{3}
    &-\sin\left(\frac{1}{15} \, \pi\right)\\
The columns correspond to $x,y,x+y$ and then we apply the sine on these values one by one. If you insist to give the formulas in the header of the in-File, then you have to parse and eval them.
Note: In order to also get something out of $\sin(\pi/15)$ one may use:
def g(u):
    roots = [ r
              for r in u.minpoly(X).roots(ring=AA, multiplicities=False )
              if abs( r-u.n() ) < 0.0001 ]
    if roots:
        r = roots[0]
        return r.radical_expression()
    return '?'
when
sage: latex( g( sin( pi/15 ) ) )
\frac{1}{4} \, \sqrt{-\sqrt{5} - 8 \, \sqrt{-\frac{3}{32} \, \sqrt{5} + \frac{15}{32}} + 7}
delivers $$ \frac{1}{4} \, \sqrt{-\sqrt{5} - 8 \, \sqrt{-\frac{3}{32} \, \sqrt{5} + \frac{15}{32}} + 7}\ .$$ (Not the best shape for a human, but a result.)
 Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.
 
                
                Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.