I have a Latex Table that for weekly lesson plans, I want to pull data from syllabi that I will store as lists.(They will be read in from csv) So the syllabus is a list of 50 chapters and the latex has spaces for 2 lessons a week for 4th grade and 3 for sixth, I want to chomp the first lesson and stick in in the first token, then the next . . .
right now my code would just give me chapter1 on Monday, Wed and Fri instead of ch1, ch2, ch3
math6 = ['chapter1', 'chapter2', 'chapter3', 'chapter1-3test']
math4= ['chapter1.1', 'chapter1.2-3', 'chapter2']
\begin{tabular}{|p{0.7in}|p{0.8in}|p{2.2in}|p{.9in}|p{2.6in}|p{1.6in}|}
6${}^{th}$ Math \newline M\newline & _math6_&
6${}^{th}$ Math \newline W \newline & _math6_ &
6${}^{th}$ Math \newline F \newline & _math6_ &
4${}^{th}$ Math \newline M\newline & & _math4_ &
4${}^{th}$ Math \newline W\newline & & _math4_ &
\end{tabular}
here is the python
import re
template = file('file1.txt', 'r').read()
lost= ["geography", "physics", "hairdressing", "torah"]
n =0
while n<len(lost):
temp=lost[n]
page= re.sub(r'_thing_', temp, template)
print page
n+=1
#page= re.sub(r'_thing_', "martha", template)
#file('result.txt', 'w').write(page)
which gives me
#contents of file1
# Really long Latex
#File that has
# geography, geography, mary, tom, susan, geography
#that I want to replace
#read file1 in as a string, replace, save again
#contents of file1
# Really long Latex
#File that has
# physics, physics, mary, tom, susan, physics
#that I want to replace
#read file1 in as a string, replace, save again
#contents of file1
# Really long Latex
#File that has
# hairdressing, hairdressing, mary, tom, susan, hairdressing
#that I want to replace
#read file1 in as a string, replace, save again
#contents of file1
# Really long Latex
#File that has
# torah, torah, mary, tom, susan, torah
#that I want to replace
#read file1 in as a string, replace, save again
The problem with using
is that every occurrence of
_thing_is getting replaced with the same value,temp.What we desire for here is a
tempvalue that can change with each match.re.subprovides such a facility through the use of a callback function as the second argument, rather than a string liketemp.The callback is simply a function that takes one argument, the match object, and returns the string we desire for that match.
Now what to put in place of the ellipsis? We can use an
iterhere:So what we really want is a callback that looks like this:
But we have more than one set of data:
math6andmath4, for example. So we need a callback factory: a function that returns a callback givendata:Putting it all together,
yields