Source code for bioa.io.readpairs
# -*- coding: utf-8 -*-
"""
==========================================
IO based functions for handling read pairs
==========================================
"""
__all__ = ["parse_pairs",
"get_pairs_from_file",
"write_pairs",
"write_pairs_to_file"]
__author__ = """Nicholas Mancuso (nick.mancuso@gmail.com)"""
# Copyright (C) 2011-2012 by
# Nicholas Mancuso <nick.mancuso@gmail.com>
# Bassam Tork <basamt@gmail.com>
# All rights reserved.
# BSD license.
[docs]def parse_pairs(stream, delimiter=","):
""" Parses a stream of read-sequence frequency pairs into a dict.
Parameters
----------
stream : iterable object
An iterable object which to pull the pairs from.
delimiter : str (optional, default=",")
The character which to delimit pairs by.
Returns
-------
pair_table : dict
Lookup table of read-sequences and their respective frequency.
"""
if not stream:
raise ValueError("Valid stream required!")
pairs = {}
for line in stream:
pair = line.split(delimiter)
ref, freq = pair[0], float(pair[1])
pairs[ref] = freq
return pairs
[docs]def get_pairs_from_file(filename, delimiter=","):
""" Opens and parses a file into read-sequence frequency pairs.
Parameters
----------
filename : str
Path to the file containing the pairs.
delimiter : str (optional, default=",")
The character which to delimit pairs by within the file.
Returns
-------
pair_table : dict
Lookup table of read-sequences and their respective frequency.
"""
if not filename:
raise ValueError("Non-empty file path required!")
pairs = {}
with open(filename, "r") as pair_file:
pairs = parse_pairs(pair_file, delimiter)
return pairs
[docs]def write_pairs(read_pairs, stream, delimiter=","):
""" Writes the read-freq pairs out to the stream.
Parameters
----------
read_pairs : dict
Lookup table of read-sequences and their respective frequency.
stream : writeable stream
A stream to write the pairs out to.
delimiter = str (optional, default=",")
The character which to delimit pairs by within the file.
Returns
-------
None
"""
if not read_pairs:
raise ValueError("Non-empty read-pairs required!")
if not stream:
raise ValueError("Valid stream required!")
for read, freq in read_pairs.items():
stream.write(read + delimiter + str(freq) + "\n")
[docs]def write_pairs_to_file(read_pairs, filename, delimiter=","):
""" Writes the read-freq pairs out to the specified file.
Parameters
----------
read_pairs : dict
Lookup table of read-sequences and their respective frequency.
filename : str
Path to the file containing the pairs.
delimiter = str (optional, default=",")
The character which to delimit pairs by within the file.
Returns
-------
None
"""
if not read_pairs:
raise ValueError("Non-empty read-pairs required!")
if not filename:
raise ValueError("Non-empty file path required!")
with open(filename, "w") as pair_file:
write_pairs(read_pairs, pair_file, delimiter)