/
csv2LaTeX.py
184 lines (153 loc) 路 4.81 KB
/
csv2LaTeX.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
import os
from .params import *
import sys
import requests
def check_update(DEBUG=False):
'''
This function check csv2latex site for newversion
:param DEBUG: Flag for using Debug mode
:type DEBUG:bool
:return: True if new version is available
'''
try:
new_version=requests.get(UPDATE_URL).text
if float(new_version)>float(version):
print("New Version ("+new_version+") Of csv2latex is available (visit github page)")
except Exception as e:
if DEBUG==True:
print(str(e))
def line(number,char="-"):
'''
:param number: number of items to print
:param char: each item of printed line
:return: line string
'''
response=""
i=0
while(i<number):
response+=char
i+=1
return response
def logo_handler():
'''
:return: None (print logo)
'''
try:
print(logo)
print("Version : "+str(version))
except:
pass
def signature(frame=41):
'''
:param frame: number of items in line
:return: header string
'''
logo_handler()
sign=line(frame,char="%")
sign = sign + "\n"
sign = sign + "For more info please visit : https://github.com/sepandhaghighi/csv2latex\n"
sign=sign+line(frame,"%")
return sign
#% "ModernCV" CV and Cover Letter
#% LaTeX Template
#% Version 1.1 (9/12/12)
def escape_char(lines_list):
'''
:param lines_list: list of lines as input (list of strings)
:return: list of lines after escape character
'''
for i,item_1 in enumerate(lines_list):
for j,item_2 in enumerate(item_1):
for char in char_list: # instead of using for use a list to find and replace
lines_list[i][j]=item_2.replace(char,"\\"+char)
return lines_list
def white_space(line_list):
'''
:param line_list: list of lines as input (list of strings)
:return: list of comma seperated item in plain text for spacing in next step
'''
len_list = []
for line in line_list:
if len(len_list)==0:
len_list.extend(list(map(len,line)))
else:
if len(line) <= len(len_list):
for i,item in enumerate(line):
if len(item) > len_list[i]:
len_list[i] = len(item)
return len_list
def header_handler(file,col_num,caption="my-caption",label="my-label"):
'''
:param file: input latex file
:param col_num: number of col
:param caption: caption for table
:param label: label for table
:return: None
'''
file.write(header["static_1"])
file.write(header["static_2"])
file.write(header["caption"]+"{"+caption+"}\n")
file.write(header["label"]+"{"+label+"}\n")
file.write(header["align"]+"{"+"c"*col_num+"}\n")
def footer_handler(file):
'''
:param file: latex file
:return: None
'''
file.write(footer+"\n")
def read_csv(file_name):
'''
:param file_name: csv file name (as string)
:return: list of csv file lines
'''
csv_file=open(file_name,"r")
csv_lines=[]
for line in csv_file:
splited_line=line.split(",")
csv_lines.append(splited_line)
csv_file.close()
return csv_lines
def create_latex(file_name,dir_folder="LaTeX",empty_space=True):
'''
:param file_name: file name of latex file 9(as string)
:param dir_folder: output folder name (as string)
:param empty_space: boolean paramter (True-->modify empty space)
:return: None
'''
try:
print("\nCreate LaTeX table for "+file_name+" . . .")
latex_file=open(os.path.join(os.getcwd(),dir_folder,file_name[:-4]+".tex"),"w")
csv_read=read_csv(file_name)
csv_lines=csv_read # continue using csv_read without declairing csv_lines
col_num=len(csv_lines[0])
header_handler(latex_file,col_num=col_num) # col_num is useless here
escape_out=escape_char(csv_lines)
list_len = white_space(escape_out)
for item in escape_out :
for i,item_2 in enumerate(item):
if i<len(item)-1:
latex_file.write(item_2)
if empty_space==True:
latex_file.write(" " * (list_len[i]-len(item_2)))
latex_file.write("&")
if empty_space==True:
latex_file.write(" "*list_len[i])
else:
latex_file.write(item_2[:-1])
latex_file.write("\\\\"+"\n")
footer_handler(latex_file)
latex_file.close()
print("Done!")
print(line(70, "*"))
except:
print("Error In LaTeX Creation")
def make_dir():
'''
:return: None
'''
if "LaTeX" not in os.listdir():
try:
os.mkdir("LaTeX")
except:
print("Access Error")
sys.exit()