aboutsummaryrefslogtreecommitdiff
path: root/r_qtl/r_qtl2.py
diff options
context:
space:
mode:
Diffstat (limited to 'r_qtl/r_qtl2.py')
-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