Reputation: 2214
I am trying to make some edits to a docx file... making a number into letter (i.e. if the variable is equal to 01 = 'one', equal to 02 = 'two', and so on, but in Spanish). The problem is that the variable f_dia_nom
doesn't work ... it doesn't even print anything... am I doing something wrong?? or am I missing something??
#!/usr/bin/env python2.6
from Tkinter import *
from docx import *
import tkMessageBox
root = Tk()
nombre = ""
exp_no = ""
ubic = ""
munic = ""
prov = ""
f_dia = ""
f_dia2 = ""
f_dia_nom = ""
def nombre_dia():
if f_dia2 == 1 or f_dia2 == 01:
f_dia_nom = "Un"
elif f_dia2 == 2 or f_dia2 == 02:
f_dia_nom = "Dos"
elif f_dia2 == 3 or f_dia2 == 03:
f_dia_nom = "Tres"
elif f_dia2 == 4 or f_dia2 == 04:
f_dia_nom = "Cuatro"
elif f_dia2 == 5 or f_dia2 == 05:
f_dia_nom = "Cinco"
elif f_dia2 == 6 or f_dia2 == 06:
f_dia_nom = "Seis"
elif f_dia2 == 7 or f_dia2 == 07:
f_dia_nom = "Siete"
else:
f_dia_nom = "Error"
# Hacer el docx
def makedocx():
if __name__ == '__main__':
# Default set of relationshipships - these are the minimum components of a document
relationships = relationshiplist()
# estructura del documento
document = opendocx('test.docx')
docbody = document.xpath('/w:document/w:body',namespaces=nsprefixes)[0]
# Buscar y reemplazar
print 'Replacing ...',
docbody = replace(docbody,'V_EXP',en1.get())
docbody = replace(docbody,'V_NOMBRE',en0.get())
docbody = replace(docbody,'V_OPERACION',op.get())
docbody = replace(docbody,'V_UBIC',en3.get())
docbody = replace(docbody,'V_MUNI',en4.get())
docbody = replace(docbody,'V_PROV',en5.get())
docbody = replace(docbody,'V_F_DIA',en6.get())
docbody = replace(docbody,'V_F_MES',mes.get())
docbody = replace(docbody,'V_F_SEM',sem.get())
docbody = replace(docbody,'V_NUM_DIA',en7.get())
nombre_dia()
docbody = replace(docbody,'V_NOM_DIA',f_dia_nom)
print 'f_dia_nom'
print 'done.'
Upvotes: 2
Views: 193
Reputation: 33716
f_dia_nom
is a global variable, which is not really a great start. If you want to manipulate it, pass f_dia2
to the function nombre_dia()
as an argument and then return f_dia_nom
from the function afterward.
def nombre_dia(f_dia2):
if f_dia2 == 1 or f_dia2 == 01:
f_dia_nom = "Un"
elif f_dia2 == 2 or f_dia2 == 02:
f_dia_nom = "Dos"
elif f_dia2 == 3 or f_dia2 == 03:
f_dia_nom = "Tres"
elif f_dia2 == 4 or f_dia2 == 04:
f_dia_nom = "Cuatro"
elif f_dia2 == 5 or f_dia2 == 05:
f_dia_nom = "Cinco"
elif f_dia2 == 6 or f_dia2 == 06:
f_dia_nom = "Seis"
elif f_dia2 == 7 or f_dia2 == 07:
f_dia_nom = "Siete"
else:
f_dia_nom = "Error"
return f_dia_nom
if __name__ == '__main__':
# All your other code...
f_dia_nom = nombre_dia(f_dia2)
print 'f_dia_nom =', f_dia_nom
docbody = replace(docbody,'V_NOM_DIA',f_dia_nom)
print 'done.'
Upvotes: 2
Reputation: 2568
Look up 'global scoping' rules for python. In general, try to avoid global variables as much as possible(if only to avoid errors like these)
in nombre_dia():
f_dia_nom = "Un"
or any other assignment for that matter has the python compiler create that number LOCAL to the nombre_dia function.
modify your function to declare f_dia_nom as a global:
def nombra_dia():
global f_dia_nom
...
It will have nombre_dia SEE the f_dia_nom as the global
Learning Python 4th edition pg 408
Upvotes: 5
Reputation: 17128
Difficult to see exactly what's supposed to be going on in your code, but a few points:
You're printing the string 'f_dia_nom' rather than the variable f_dia_nom
You can't change global variables from inside a function without using global <variable>
first
No need to check against 1 and 01 (etc.) since 1 == 01
You don't seem to be setting/creating f_dia2
anywhere...
Upvotes: 0
Reputation: 45039
Get rid of if __name__ == '__main__':
That is testing whether or not you are in the main module. (The one you specifically asked to run). I'm guessing that you aren't.
if __name__ == '__main__'
only makes sense if you are on the module level (outside of any functions, so you can detect if you are being run or being imported.)
Upvotes: 0