From 06c48f31e1c0c871aa4a6961b8dcd7213e4c3693 Mon Sep 17 00:00:00 2001
From: Jennifer Rinker <rink@win.dtu.dk>
Date: Tue, 13 Jun 2017 12:57:57 +0200
Subject: [PATCH] Initial upload of function

write_master.py creates a master Excel file for
automated DLB runs from a series of text files.
See usage and other notes in function doc string.
---
 wetb/prepost/write_master.py | 121 +++++++++++++++++++++++++++++++++++
 1 file changed, 121 insertions(+)
 create mode 100644 wetb/prepost/write_master.py

diff --git a/wetb/prepost/write_master.py b/wetb/prepost/write_master.py
new file mode 100644
index 00000000..badf3bcd
--- /dev/null
+++ b/wetb/prepost/write_master.py
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+"""
+Create a master Excel sheet from a series of text files
+
+Command-line usage
+------------------
+$ python write_master.py [OPTIONS]
+
+Command line options
+--------------------
+ --folder (default='DLCs')
+    folder containing text files
+ --filename (default='DLCs.xlsx')
+    name of Excel file to save incl. extension
+ --fileend (default='.txt')
+    text file extention
+ --delimiter (default='\t')
+    character separating columns in text files
+
+Author: Jenni Rinker, rink@dtu.dk
+"""
+from __future__ import print_function
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import absolute_import
+
+from   argparse import ArgumentParser
+import numpy as np
+import os
+import pandas as pd
+
+def write_master(path_to_texts,
+                 excel_name='DLCs.xlsx', file_end='.txt',
+                 delimiter='\t'):
+    """ Write a master Excel sheet from a series of text files
+    
+    Args:
+        path_to_texts (str): path to directory with text files
+        excel_name (str): filename of generated master Excel file
+        file_end (str): file ending of text files
+        delimiter (str): column delimiter in text files
+    """
+
+    # formatting for header cells
+    header_dict = {'bold': True, 'font_color': '#1F497D',
+                   'bottom': 2, 'bottom_color': '#95B3D7'}
+    
+    # get list of text files
+    text_files = [f for f in os.listdir(path_to_texts) \
+                                  if f.endswith(file_end)]
+    
+    # check if main text file in the specified directory
+    if 'Main'+file_end not in text_files:
+        raise ValueError('\"Main\" file not in CSV directory')
+    
+    # rearrange text files so main page is first and everything 
+    #   else is alphabetical
+    text_files.remove('Main'+file_end)
+    text_files = ['Main'+file_end] + sorted(text_files)
+    
+    # open excel file
+    writer = pd.ExcelWriter(excel_name, engine='xlsxwriter')
+    
+    # create workbook and add formast
+    workbook  = writer.book
+    header    = workbook.add_format(header_dict)
+    
+    # loop through text files
+    for text_name in text_files:
+    
+        # define path to csv file
+        text_path = os.path.join(path_to_texts,text_name)
+        
+        # read data, write to Excel file, and define worksheet handle
+        text_df = pd.read_table(text_path,
+                                delimiter=delimiter, dtype=str,
+                                header=None)
+        text_df.to_excel(writer, sheet_name=text_name.rstrip(file_end),
+                         index=False, header=False)
+        worksheet = writer.sheets[text_name.rstrip(file_end)]
+        
+        # get column widths by calculating max string lenths
+        col_widths = text_df.apply(lambda x: np.max([len(str(s)) for s in x]))
+        
+        # add formatting
+        for i_col, width in enumerate(col_widths):
+            worksheet.set_column(i_col, i_col, width)
+        if 'Main' in text_name:  # hardcode first column on main tab
+            worksheet.set_column('A:A',  16.56)
+            for i_row in [6,9,13,18,24,28]:
+                worksheet.set_row(i_row, cell_format=header)
+        else:
+            worksheet.set_row(1, cell_format=header)
+        worksheet.set_zoom(zoom=85)
+        
+    # save worksheet
+    writer.save()
+    
+    return
+
+if __name__ == '__main__':
+
+    # define argument parser
+    parser = ArgumentParser(description="generator of master excel sheet")
+    parser.add_argument('--folder', type=str, default='DLCs', action='store',
+                        dest='folder', help='Destination folder name')
+    parser.add_argument('--filename', type=str, default='DLCs.xlsx',
+                        action='store',  dest='filename',
+                        help='Master spreadsheet file name')
+    parser.add_argument('--fileend', type=str, default='.txt',
+                        action='store',  dest='fileend',
+                        help='File extension for fileend files')
+    parser.add_argument('--delimiter', type=str, default='\t',
+                        action='store',  dest='delimiter',
+                        help='Text delimiter in files')
+    opt = parser.parse_args()
+
+    # write master Excel files
+    write_master(opt.folder,
+                 excel_name=opt.filename, file_end=opt.fileend,
+                 delimiter=opt.delimiter)
-- 
GitLab