diff get_contigs_from_re_archive.py @ 1:814cba36e435 draft

Uploaded
author mvdbeek
date Mon, 21 Feb 2022 10:21:39 +0000
parents ea6a3059a6af
children
line wrap: on
line diff
--- a/get_contigs_from_re_archive.py	Mon Oct 18 11:01:20 2021 +0000
+++ b/get_contigs_from_re_archive.py	Mon Feb 21 10:21:39 2022 +0000
@@ -8,6 +8,7 @@
 import zipfile
 import tempfile
 import textwrap
+import os
 
 def parse_args():
     '''Argument parsin'''
@@ -143,7 +144,10 @@
     ids = []
     s = []
     for i in fobj:
-        ii = i.decode('utf-8')
+        if isinstance(i, str):
+            ii = i
+        else:
+            ii = i.decode('utf-8')
         if ii[0] == ">":
             ids.append(ii)
             s.append("")
@@ -151,6 +155,21 @@
             s[-1] = s[-1] + ii.strip()
     return ids, s
 
+
+def extract_contigs_from_re_directory(re_dir, aln_output):
+    with open(aln_output, 'w') as fout:
+        for subdir, dirs, files in os.walk(re_dir):
+            for fn in files:
+                fn_full = subdir + os.sep + fn
+                if re.match('^.+seqclust.+[.]aln$', fn_full):
+                    print(fn_full)
+                    with open(fn_full) as aln:
+                        for l in aln:
+                            fout.write(l)
+    return aln_output
+
+
+
 def extract_tarean_contigs_from_re_archive(archive):
     with zipfile.ZipFile(archive, 'r') as zip_object:
         flist = zip_object.infolist()
@@ -168,10 +187,21 @@
     return ids_all, seqs_all
 
 
-def extract_contigs_from_re_directory(dir, aln_output):
-    # TODO
-    pass
-
+def extract_tarean_contigs_from_re_directory(re_dir):
+    seqs_all = []
+    ids_all = []
+    for subdir, dirs, files in os.walk(re_dir):
+        for fn in files:
+            fn_full = subdir + os.sep + fn
+            if re.match("^.+seqclust.+dir_CL[0-9]+[/]tarean_contigs.fasta", fn_full):
+                print (fn_full)
+                with open(fn_full) as fobj:
+                    ids, seqs = read_tarean_fasta(fobj)
+                    # wrap sequences
+                    seqs = ["\n".join(textwrap.wrap(s + s, 80)) for s in seqs]
+                    seqs_all += seqs
+                    ids_all += ids
+    return ids_all, seqs_all
 
 def filter_contigs(consensus, coverage, min_coverage=5):
     x = "".join([
@@ -184,11 +214,19 @@
 
 def main():
     args = parse_args()
-    # extract aln from archive
-    ids, seqs = extract_tarean_contigs_from_re_archive(args.re_file)
-    aln_file = extract_contigs_from_re_archive(
-        args.re_file,
-        tempfile.NamedTemporaryFile().name)
+    if os.path.isdir(args.re_file):
+        # extract from directory
+        ids, seqs = extract_tarean_contigs_from_re_directory(args.re_file)
+        aln_file = extract_contigs_from_re_directory(
+            args.re_file,
+            tempfile.NamedTemporaryFile().name)
+    else:
+        # extract aln from archive
+        ids, seqs = extract_tarean_contigs_from_re_archive(args.re_file)
+        aln_file = extract_contigs_from_re_archive(
+            args.re_file,
+            tempfile.NamedTemporaryFile().name)
+
     with open(aln_file, 'r') as f1, open(args.fasta, 'w') as ffasta:
         while True:
             contig_name, seq_start = get_header(f1)