@@ -178,39 +178,39 @@ def save_results(self, filename, outformat="json"):
178
178
179
179
elif outformat .upper () == "CSV" :
180
180
# Open output CSV file
181
- csv_table = open (filename , "w" )
182
- # Gather any additional metadata
183
- metadata_key_list = list (self .metadata .keys ())
184
- metadata_val_list = [val ["value" ] for val in self .metadata .values ()]
185
- # Write the header
186
- header = metadata_key_list + ["sample" , "trait" , "value" , "label" ]
187
- csv_table .write ("," .join (map (str , header )) + "\n " )
188
- # Iterate over data samples
189
- for sample in self .observations :
190
- # Iterate over traits for each sample
191
- for var in self .observations [sample ]:
192
- val = self .observations [sample ][var ]["value" ]
193
- # If the data type is a list or tuple we need to unpack the data
194
- if isinstance (val , (list , tuple )):
195
- # Combine each value with its label
196
- for value , label in zip (self .observations [sample ][var ]["value" ],
197
- self .observations [sample ][var ]["label" ]):
198
- # Skip list of tuple data types
199
- if not isinstance (value , tuple ):
200
- # Save one row per value-label
201
- row = metadata_val_list + [sample , var , value , label ]
202
- csv_table .write ("," .join (map (str , row )) + "\n " )
203
- # If the data type is Boolean, store as a numeric 1/0 instead of True/False
204
- elif isinstance (val , bool ):
205
- row = metadata_val_list + [sample , var , int (self .observations [sample ][var ]["value" ]),
206
- self .observations [sample ][var ]["label" ]]
207
- csv_table .write ("," .join (map (str , row )) + "\n " )
208
- # For all other supported data types, save one row per trait
209
- # Assumes no unusual data types are present (possibly a bad assumption)
210
- else :
211
- row = metadata_val_list + [sample , var , self .observations [sample ][var ]["value" ],
212
- self .observations [sample ][var ]["label" ]]
213
- csv_table .write ("," .join (map (str , row )) + "\n " )
181
+ with open (filename , "w" ) as csv_table :
182
+ # Gather any additional metadata
183
+ metadata_key_list = list (self .metadata .keys ())
184
+ metadata_val_list = [val ["value" ] for val in self .metadata .values ()]
185
+ # Write the header
186
+ header = metadata_key_list + ["sample" , "trait" , "value" , "label" ]
187
+ csv_table .write ("," .join (map (str , header )) + "\n " )
188
+ # Iterate over data samples
189
+ for sample in self .observations :
190
+ # Iterate over traits for each sample
191
+ for var in self .observations [sample ]:
192
+ val = self .observations [sample ][var ]["value" ]
193
+ # If the data type is a list or tuple we need to unpack the data
194
+ if isinstance (val , (list , tuple )):
195
+ # Combine each value with its label
196
+ for value , label in zip (self .observations [sample ][var ]["value" ],
197
+ self .observations [sample ][var ]["label" ]):
198
+ # Skip list of tuple data types
199
+ if not isinstance (value , tuple ):
200
+ # Save one row per value-label
201
+ row = metadata_val_list + [sample , var , value , label ]
202
+ csv_table .write ("," .join (map (str , row )) + "\n " )
203
+ # If the data type is Boolean, store as a numeric 1/0 instead of True/False
204
+ elif isinstance (val , bool ):
205
+ row = metadata_val_list + [sample , var , int (self .observations [sample ][var ]["value" ]),
206
+ self .observations [sample ][var ]["label" ]]
207
+ csv_table .write ("," .join (map (str , row )) + "\n " )
208
+ # For all other supported data types, save one row per trait
209
+ # Assumes no unusual data types are present (possibly a bad assumption)
210
+ else :
211
+ row = metadata_val_list + [sample , var , self .observations [sample ][var ]["value" ],
212
+ self .observations [sample ][var ]["label" ]]
213
+ csv_table .write ("," .join (map (str , row )) + "\n " )
214
214
215
215
def plot_dists (self , variable ):
216
216
"""Plot a distribution of data.
0 commit comments