about summary refs log tree commit diff
path: root/r_qtl
diff options
context:
space:
mode:
Diffstat (limited to 'r_qtl')
-rw-r--r--r_qtl/r_qtl2.py30
1 files changed, 25 insertions, 5 deletions
diff --git a/r_qtl/r_qtl2.py b/r_qtl/r_qtl2.py
index d3a3805..d8231bb 100644
--- a/r_qtl/r_qtl2.py
+++ b/r_qtl/r_qtl2.py
@@ -48,12 +48,26 @@ def with_non_transposed(zfile: ZipFile,
     def not_comment_line(line):
         return not line.startswith(cdata.get("comment.char", "#"))
 
+    sep = cdata.get("sep", ",")
     with zfile.open(cdata[member_key]) as innerfile:
-        reader = csv.DictReader(
-            filter(not_comment_line, io.TextIOWrapper(innerfile)),
-            delimiter=cdata.get("sep", ","))
+        wrapped_file = io.TextIOWrapper(innerfile)
+        firstrow = tuple(
+            field.strip() for field in
+            next(filter(not_comment_line, wrapped_file)).strip().split(sep))
+        id_key = firstrow[0]
+        wrapped_file.seek(0)
+        reader = csv.DictReader(filter(not_comment_line, wrapped_file),
+                                delimiter=sep)
         for row in reader:
-            yield process_value(row)
+            processed = process_value(row)
+            yield {
+                "id": processed[id_key],
+                **{
+                    key: value
+                    for key, value in processed.items()
+                    if key != id_key
+                }
+            }
 
 def __make_organise_by_id__(id_key):
     """Return a function to use with `reduce` to organise values by some
@@ -101,7 +115,13 @@ def with_transposed(zfile: ZipFile,
                      for line in batch
                      for row in process_value(id_key, headers, line)),
                     {}).items():
-                yield row
+                yield {
+                    "id": row[id_key],
+                    **{
+                        key: value
+                        for key, value in row.items()
+                        if key != id_key
+                    }}
         except StopIteration:
             pass