Skip to content

Instantly share code, notes, and snippets.

@runiq
Created November 14, 2013 15:01
Show Gist options
  • Select an option

  • Save runiq/7468272 to your computer and use it in GitHub Desktop.

Select an option

Save runiq/7468272 to your computer and use it in GitHub Desktop.
Extract_sequences.py für mehrere CSV-Dateien
#! /usr/bin/env python2
import argparse
import csv
def write_sequence(name, sequence, fh):
fh.write("> " + name + "\n")
fh.write(sequence + "\n")
fh.write("\n")
def construct_sequences(file):
fh = open(file)
csv_data = csv.DictReader(fh, delimiter=',')
tmp_seqid = None
fullseq = ''
for row in csv_data:
seqid = row['protein.key']
if (seqid != tmp_seqid) and (tmp_seqid is not None):
yield (name, fullseq)
fullseq = ''
if name == 'Crap':
name = row['protein.Accession']
else:
name = row['protein.Entry']
seq = row['peptide.seq']
seqstart = int(row['peptide.seqStart'])
seqlen = len(seq)
seqend = seqstart + seqlen
if len(fullseq) < seqend:
# Add missing residues as gaps
fullseq += '-' * (seqend - len(fullseq))
# Replace gaps at sequence positions with seq
fullseq = fullseq[:seqstart] + seq + fullseq[seqend:]
tmp_seqid = seqid
fh.close()
# Yield the last sequence as well
yield (name, fullseq)
def parse_args():
p = argparse.ArgumentParser()
p.add_argument("csv_infile", metavar='INFILE', nargs='+', help="CSV input data")
p.add_argument("fasta_outfile", metavar='OUTFILE', help="FASTA output file")
return p.parse_args()
def main():
args = parse_args()
outfile = open(args.fasta_outfile, 'w')
for infile in args.csv_infile:
for name, seq in construct_sequences(csv_infile):
write_sequence(name, seq, outfile)
outfile.close()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment