From 0c180a7f429c9b576722527930642f7065e12612 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 23 Jan 2022 20:50:27 -0500 Subject: [PATCH] working single group --- .gitignore | 3 +- xlsx_dir_map/__main__.py | 18 ++++++++---- xlsx_dir_map/directory.py | 10 +++++++ xlsx_dir_map/spreadsheet.py | 57 +++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 7 deletions(-) create mode 100644 xlsx_dir_map/directory.py create mode 100644 xlsx_dir_map/spreadsheet.py diff --git a/.gitignore b/.gitignore index 0560ef8..e5653ed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.xlsx *# -__pycache__ \ No newline at end of file +__pycache__ +test_out \ No newline at end of file diff --git a/xlsx_dir_map/__main__.py b/xlsx_dir_map/__main__.py index b1de448..3b3498a 100644 --- a/xlsx_dir_map/__main__.py +++ b/xlsx_dir_map/__main__.py @@ -1,11 +1,17 @@ -from openpyxl import load_workbook +import argparse -wb = load_workbook(filename = 'names.xlsx') +parser = argparse.ArgumentParser(description='Process some intzzz') +parser.add_argument('--in', '-i', dest='file_in', required=True) +parser.add_argument('--out', '-o') +parser.add_argument('--range', '-r', dest='cell_range') -names = [] +args = parser.parse_args() -for row in wb.active.iter_rows(): - name = " ".join(list(map(lambda cell: cell.value, row))) - names.append(name) +from spreadsheet import get_names_list +names = get_names_list(args.file_in, args.cell_range) print(names) + +from directory import create_directories + +create_directories(args.out, names) diff --git a/xlsx_dir_map/directory.py b/xlsx_dir_map/directory.py new file mode 100644 index 0000000..a856562 --- /dev/null +++ b/xlsx_dir_map/directory.py @@ -0,0 +1,10 @@ +import os +from pathlib import Path + +def create_directory(name): + Path(name).mkdir(parents=True, exist_ok=True) + +def create_directories(outdir, paths): + for path in paths: + fullpath = f"{outdir}/{path}" if outdir is not None else path + create_directory(fullpath) diff --git a/xlsx_dir_map/spreadsheet.py b/xlsx_dir_map/spreadsheet.py new file mode 100644 index 0000000..310e9f0 --- /dev/null +++ b/xlsx_dir_map/spreadsheet.py @@ -0,0 +1,57 @@ +from openpyxl import load_workbook + +ALPHA = { + 'A': 1, + 'B': 2, + 'C': 3, + 'D': 4, + 'E': 5, + 'F': 6, + 'G': 7, + 'H': 8, + 'I': 9, + 'J': 10, + 'K': 11, + 'L': 12, + 'M': 13, + 'N': 14, + 'O': 15, + 'P': 16, + 'Q': 17, + 'R': 18, + 'S': 19, + 'T': 20, + 'U': 21, + 'V': 22, + 'W': 23, + 'X': 24, + 'Y': 25, + 'Z': 26 +} + +def parse_range(cellrange): + cell1 = cellrange.split(":")[0] + cell2 = cellrange.split(":")[1] + + min_col = ALPHA[cell1[0]] + min_row = int(cell1[1:]) + + max_col = int(ALPHA[cell2[0]]) + max_row = int(cell2[1:]) + + return (min_row, min_col, max_row, max_col) + +def get_names_list(filename, cellrange): + wb = load_workbook(filename = filename) + names = [] + + min_row = min_col = max_row = max_col = None + + if cellrange: + min_row, min_col, max_row, max_col = parse_range(cellrange) + + for row in wb.active.iter_rows(min_row=min_row, min_col=min_col, max_row=max_row, max_col=max_col, values_only=True): + name = " ".join([str(cell) for cell in row if cell is not None]) + names.append(name) + + return [name for name in names if name != ""]