Spaces:
No application file
No application file
# Copyright 2001 by Katharine Lindner. All rights reserved. | |
# Copyright 2006 by PeterC. All rights reserved. | |
# Copyright 2007 by Michiel de Hoon. All rights reserved. | |
# This code is part of the Biopython distribution and governed by its | |
# license. Please see the LICENSE file that should have been included | |
# as part of this package. | |
"""Parser for files from NCBI's Gene Expression Omnibus (GEO). | |
http://www.ncbi.nlm.nih.gov/geo/ | |
""" | |
from . import Record | |
def _read_key_value(line): | |
words = line[1:].split("=", 1) | |
try: | |
key, value = words | |
value = value.strip() | |
except ValueError: | |
key = words[0] | |
value = "" | |
key = key.strip() | |
return key, value | |
def parse(handle): | |
"""Read Gene Expression Omnibus records from file handle. | |
Returns a generator object which yields Bio.Geo.Record() objects. | |
""" | |
record = None | |
for line in handle: | |
line = line.strip("\n").strip("\r") | |
if not line: | |
continue # Ignore empty lines | |
c = line[0] | |
if c == "^": | |
if record: | |
yield record | |
record = Record.Record() | |
record.entity_type, record.entity_id = _read_key_value(line) | |
elif c == "!": | |
if line in ( | |
"!Sample_table_begin", | |
"!Sample_table_end", | |
"!Platform_table_begin", | |
"!Platform_table_end", | |
): | |
continue | |
key, value = _read_key_value(line) | |
if key in record.entity_attributes: | |
if isinstance(record.entity_attributes[key], list): | |
record.entity_attributes[key].append(value) | |
else: | |
existing = record.entity_attributes[key] | |
record.entity_attributes[key] = [existing, value] | |
else: | |
record.entity_attributes[key] = value | |
elif c == "#": | |
key, value = _read_key_value(line) | |
assert key not in record.col_defs | |
record.col_defs[key] = value | |
else: | |
row = line.split("\t") | |
record.table_rows.append(row) | |
yield record | |