1
2
3
4
5
6
7 import RDConfig
8 import Chem
9 import sys,csv
10
11 -def Convert(suppl,outFile,keyCol='',stopAfter=-1,includeChirality=0,smilesFrom=''):
46
47
48
49
50 import unittest
57 import os
58 from cStringIO import StringIO
59 fName = os.path.join(RDConfig.RDDataDir,'NCI','first_200.props.sdf')
60 suppl = Chem.SDMolSupplier(fName)
61 io = StringIO()
62 try:
63 Convert(suppl,io)
64 except:
65 import traceback
66 traceback.print_exc()
67 self.fail('conversion failed')
68 txt = io.getvalue()
69 lines = txt.split('\n')
70 if not lines[-1]:
71 del lines[-1]
72 self.failUnless(len(lines)==201,'bad num lines: %d'%len(lines))
73 line0 = lines[0].split(',')
74 self.failUnless(len(line0)==16,'%d'%len(line0))
75 self.failUnless(line0[0]=='SMILES')
77 import os
78 from cStringIO import StringIO
79 fName = os.path.join(RDConfig.RDDataDir,'NCI','first_200.props.sdf')
80 suppl = Chem.SDMolSupplier(fName)
81 io = StringIO()
82 try:
83 Convert(suppl,io,keyCol='AMW',stopAfter=5)
84 except:
85 import traceback
86 traceback.print_exc()
87 self.fail('conversion failed')
88 txt = io.getvalue()
89 lines = txt.split('\n')
90 if not lines[-1]:
91 del lines[-1]
92 self.failUnless(len(lines)==6,'bad num lines: %d'%len(lines))
93 line0 = lines[0].split(',')
94 self.failUnless(len(line0)==16,'%d'%len(line0))
95 self.failUnless(line0[0]=='AMW')
96 self.failUnless(line0[1]=='SMILES')
97
98
99
100
101
102
103
104
105
107 message = """
108 Usage: SDFToCSV [-k keyCol] inFile.sdf [outFile.csv]
109
110 """
111 sys.stderr.write(message)
112 sys.exit(-1)
113
114
115
116 if __name__=='__main__':
117 import getopt
118
119 try:
120 args,extras = getopt.getopt(sys.argv[1:],'hk:',
121 ['test',
122 'chiral',
123 'smilesCol=',
124 ])
125 except:
126 import traceback
127 traceback.print_exc()
128 Usage()
129
130 keyCol = ''
131 testIt = 0
132 useChirality=0
133 smilesCol=''
134 for arg,val in args:
135 if arg=='-k':
136 keyCol = val
137 elif arg=='--chiral':
138 useChirality=1
139 elif arg=='--smilesCol':
140 smilesCol=val
141 elif arg=='--test':
142 testIt=1
143 elif arg=='-h':
144 Usage()
145
146 if not testIt and len(extras)<1:
147 Usage()
148
149
150 if not testIt:
151 inFilename = extras[0]
152 if len(extras)>1:
153 outFilename = extras[1]
154 outF = open(outFilename,'w+')
155 else:
156 outF = sys.stdout
157
158 suppl = Chem.SDMolSupplier(inFilename)
159 Convert(suppl,outF,keyCol=keyCol,includeChirality=useChirality,smilesFrom=smilesCol)
160 else:
161 sys.argv = [sys.argv[0]]
162 unittest.main()
163