Source code for pyexlatex.tools

import datetime
import filecmp
import os

from pyexlatex.tools.fileops import move_if_exists, remove_all_if_exist, remove_if_exists, move_all_if_exists


[docs]def date_time_move_latex(tablename,filepath, folder_name='Tables'): r""" Takes a LaTeX tex and PDF after the PDF's been created by pdflatex and moves it into a table folder with the date, checking if the table was just previously created. If it's the same as before, it just deletes the file. Required arguments: tablename: operating system name of the table, without extensions filepath: full filepath of table, without table name. put r before quotes as follows: r'C:\Users\Folder' """ def exit_sequence(): inpath_aux = os.path.join(filepath, str(tablename) + '.aux') inpath_log = os.path.join(filepath, str(tablename) + '.log') remove_all_if_exist([inpath_aux, inpath_log]) return def join_paths(*paths): return os.path.abspath(os.path.join(*paths)) table_pdf = tablename + ".pdf" table_tex = tablename + ".tex" table_xlsx = tablename + ".xlsx" inpath_pdf = join_paths(filepath,table_pdf) inpath_tex = join_paths(filepath,table_tex) inpath_xlsx = join_paths(filepath,table_xlsx) all_inpaths = [inpath_pdf, inpath_tex, inpath_xlsx] tables_path = join_paths(filepath, folder_name) #set table directory if not os.path.exists(tables_path): #create a general table directory if it doesn't exist os.makedirs(tables_path) current_time = datetime.datetime.today().timetuple() format_time = [str(current_time[0]),str(current_time[1]),str(current_time[2])] for i in range(3): if current_time[i] < 10: format_time[i] = "0" + str(current_time[i]) datetime_str = "{}-{}-{}_".format(format_time[0],format_time[1],format_time[2]) count = 0 #set up count variable while True: #continuous loop count += 1 str_count = "Num" + str(count) name_str = datetime_str + str_count folder_path = os.path.join(tables_path,name_str) outpath_tex = os.path.join(folder_path, table_tex) if os.path.exists(folder_path): #if the folder already exists if os.path.exists(outpath_tex): #if there is already a tex file with the same name if filecmp.cmp(outpath_tex,inpath_tex) == True: #if this is the same exact table exit_sequence() remove_all_if_exist(all_inpaths) return None else: #if there is a tex file with the same name but it's not the same table continue #go to next iteration of loop (change output number) else: move_all_if_exists(all_inpaths, folder_path) exit_sequence() return folder_path else: #if the folder doesn't exist os.mkdir(folder_path) #create the folder move_all_if_exists(all_inpaths, folder_path) exit_sequence() return folder_path
[docs]def csv_to_raw_latex(infile, csvstring=False, missing_rep=" - ", formatstr='{:.3f}', skipfix=None): ''' Takes a CSV text file and converts it to a LaTeX formatted list, with each line of the LaTeX file as an item in the list. Required options: infile: Full file path of CSV (include r before quotes) Optional options: csvstring: True to pass a CSV string to infile rather than load from file missing_rep: Representation for missing numbers, default " - " formatstr: Python string for number formatting, for example '{:.3f}' with quotes skipfix: String or list of strings of fixes to skip, options are ['&','%','_'] ''' latex_list = [] if not csvstring: f = open(infile,'r') else: from io import StringIO f = StringIO(infile) if skipfix: if isinstance(skipfix, str): skipfix = [skipfix] assert isinstance(skipfix, list) csv_list = f.readlines() miss_csv_list = replace_missing_csv(csv_list,missing_rep) latex_list = [] for i, line in enumerate(miss_csv_list): line_string = '' for j, item in enumerate(line): if j != 0: #don't put an & before the first item in line line_string += ' & ' #LaTeX character fixes if skipfix: if '&' not in skipfix: item = item.replace('&', '\&') if '%' not in skipfix: item = item.replace('%', '\%') if '_' not in skipfix: item = item.replace('_', '\_') else: #make all replacements item = item.replace('&','\&') item = item.replace('%','\%') item = item.replace('_','\_') if item.find('.') is not -1: #if we are dealing with a number with decimals if formatstr: try: item = formatstr.format(float(item)) except: pass item = item.replace('\n','') line_string += item line_string += " \\\ \n" if i == 0: #on the first line, remove quotes from names line_string = line_string.replace('''"''','') #strip out quotes latex_list.append(line_string) if not csvstring: f.close() return latex_list
[docs]def replace_missing_csv(csv_list, missing_rep): ''' Replaces missing items in a CSV with a given missing representation string. ''' full_list = [] for line in csv_list: line_list = line.split(',') new_line_list = [] for item in line_list: if item == '': #if the item is missing item = missing_rep new_line_list.append(item) full_list.append(new_line_list) return full_list