Codi font de creació d'articles a partir de l'INSEE

De Amical Wikimedia
Dreceres ràpides: navegació, cerca
# -*- coding:utf-8 -*-
 
#-------------------------------------------------------------------------------
# Nom:         Creació d'articles a partir de dades estadístiques.
# Comentari:   Crea articles sobre les poblacions de França a partir de les dades de l'INSEE.
#              Desenvolupat amb el finançament de la Fundació PuntCat.
#
# Autor:       Amical-Desenv1
#
# Creat:       1/03/2011
# Copyright:   (c) Amical Viquipèdia 2010
# Llicència:   GDFL
#-------------------------------------------------------------------------------
#!/usr/bin/env python
 
 
import string, wikipedia, math, re ,locale, codecs
 
locale.setlocale(locale.LC_ALL, '')
 
global directori, superficie, dades, nom, nomDepartament
superficie = 0
directori = ""
 
nomDepartament = {}
nomDepartament['01'] = u"de l'Ain"
nomDepartament['02'] = u"de l'Aisne"
nomDepartament['03'] = u"de l'Alier"
nomDepartament['04'] = u"dels Alps de l'Alta Provença"
nomDepartament['05'] = u"dels Alts Alps"
nomDepartament['06'] = u"dels Alps Marítims"
nomDepartament['07'] = u"de l'Ardecha"
nomDepartament['08'] = u"de les Ardenes"
nomDepartament['09'] = u"de l'Arieja"
nomDepartament['10'] = u"de l'Aube"
nomDepartament['11'] = u"de l'Aude"
nomDepartament['12'] = u"de l'Avairon"
nomDepartament['13'] = u"de les Boques del Roine"
nomDepartament['14'] = u"de Calvados"
nomDepartament['15'] = u"del Cantal"
nomDepartament['16'] = u"de Charente"
nomDepartament['17'] = u"de Charente Marítim"
nomDepartament['18'] = u"de Cher"
nomDepartament['19'] = u"de la Corresa"
nomDepartament['2A'] = u"de Còrsega del Sud"
nomDepartament['2B'] = u"de l'Alta Còrsega"
nomDepartament['21'] = u"de la Costa d'Or"
nomDepartament['22'] = u"de les Costes del Nord"
nomDepartament['23'] = u"de la Cruesa"
nomDepartament['24'] = u"de la Dordonya"
nomDepartament['25'] = u"del Doubs"
nomDepartament['26'] = u"de la Droma"
nomDepartament['27'] = u"de l'Eure"
nomDepartament['28'] = u"de l'Eure i Loir"
nomDepartament['29'] = u"de Finisterre"
nomDepartament['30'] = u"del Gard"
nomDepartament['31'] = u"de l'Alta Garona"
nomDepartament['32'] = u"del Gers"
nomDepartament['33'] = u"de Gironda"
nomDepartament['34'] = u"de l'Erau"
nomDepartament['35'] = u"de l'Ille i Vilaine"
nomDepartament['36'] = u"de l'Indre"
nomDepartament['37'] = u"de l'Indre i Loira"
nomDepartament['38'] = u"de la Isèra"
nomDepartament['39'] = u"del Jura"
nomDepartament['40'] = u"de les Landes"
nomDepartament['41'] = u"del Loir i Cher"
nomDepartament['42'] = u"del Loira"
nomDepartament['43'] = u"de l'Alt Loira"
nomDepartament['44'] = u"del Loira Atlàntic"
nomDepartament['45'] = u"del Loiret"
nomDepartament['46'] = u"de l'Òlt"
nomDepartament['47'] = u"d'Òlt i Garona"
nomDepartament['48'] = u"de la Losera"
nomDepartament['49'] = u"de Maine i Loira"
nomDepartament['50'] = u"de Manche"
nomDepartament['51'] = u"del Marne"
nomDepartament['52'] = u"de l'Alt Marne"
nomDepartament['53'] = u"de Mayenne"
nomDepartament['54'] = u"de Meurthe i Mosel·la"
nomDepartament['55'] = u"del Mosa"
nomDepartament['56'] = u"de l'Ar Mor-Bihan"
nomDepartament['57'] = u"de Mosel·la"
nomDepartament['58'] = u"de la Nièvre"
nomDepartament['59'] = u"del Nord"
nomDepartament['60'] = u"de l'Oise"
nomDepartament['61'] = u"de l'Orne"
nomDepartament['62'] = u"del Pas-de-Calais"
nomDepartament['63'] = u"del Puèi Domat"
nomDepartament['64'] = u"dels Pirineus Atlàntics"
nomDepartament['65'] = u"dels Alts Pirineus"
nomDepartament['66'] = u"dels Pirineus Orientals"
nomDepartament['67'] = u"del Baix Rin"
nomDepartament['68'] = u"de l'Alt Rin"
nomDepartament['69'] = u"del Roine"
nomDepartament['70'] = u"de l'Alt Saona"
nomDepartament['71'] = u"de Saona i Loira"
nomDepartament['72'] = u"del Sarthe"
nomDepartament['73'] = u"de Savoia"
nomDepartament['74'] = u"de l'Alta Savoia"
nomDepartament['75'] = u"París"
nomDepartament['76'] = u"del Sena Marítim"
nomDepartament['77'] = u"del Sena i Marne"
nomDepartament['78'] = u"de Yvelines"
nomDepartament['79'] = u"de Deux-Sèvres"
nomDepartament['80'] = u"del Somme"
nomDepartament['81'] = u"del Tarn"
nomDepartament['82'] = u"del Tarn i Garona"
nomDepartament['83'] = u"del Var"
nomDepartament['84'] = u"de la Valclusa"
nomDepartament['85'] = u"de Vendée"
nomDepartament['86'] = u"de la Viena"
nomDepartament['87'] = u"de l'Alta Viena"
nomDepartament['88'] = u"dels Vosges"
nomDepartament['89'] = u"de l'Yonne"
nomDepartament['90'] = u"del Territori de Belfort"
nomDepartament['91'] = u"de l'Essonne"
nomDepartament['92'] = u"dels Alts del Sena"
nomDepartament['93'] = u"de Sena Saint-Denis"
nomDepartament['94'] = u"de la Val-de-Marne"
nomDepartament['95'] = u"de Val-d'Oise"
nomDepartament['971'] = u"de Guadalupe"
nomDepartament['972'] = u"de la Martinica"
nomDepartament['973'] = u"de la Guaiana Francesa"
nomDepartament['974'] = u"de l'illa de la Reunió"
 
cercanom = re.compile('([^A-Z]*)([A-Z].*)')
'''print cercanom.findall(nomDepartament['973'])[0][1]
print cercanom.sub(r'\1[[\2]]',nomDepartament['973'])
x = input('?')'''
 
 
def obreFitxers():
	global Dadestaula
	Dadestaula = codecs.open(directori+u"DadesTaula post5.txt", encoding='utf8', mode= "r")
 
 
def carregadiccionari2(fitxer_entrada,insee,seguent = False, age = False):
    global directori
    #if insee > '90000' : print insee
    linia_entrada = fitxer_entrada.readline()
    try :
        linia_entrada = eval(linia_entrada)
    except :
        print linia_entrada, insee
    if age : linia_entrada["Insee"] = linia_entrada["Departament"] + linia_entrada["Comuna"]
    while linia_entrada["Insee"] < insee :
        linia_entrada = eval(fitxer_entrada.readline())
        if age : linia_entrada["Insee"] = linia_entrada["Departament"] + linia_entrada["Comuna"]
        if len(linia_entrada) < 3 : return ""
    if seguent == True :
        linia_entrada = eval(fitxer_entrada.readline())
        if age : linia_entrada["Insee"] = linia_entrada["Departament"] + linia_entrada["Comuna"]
        if len(linia_entrada) < 3 : return ""
    if seguent == False and insee != linia_entrada["Insee"] : return ""
    return linia_entrada
 
 
def creadic() :
	global Dadestaula
	obreFitxers()
	dades = {}
	fitxer_entrada = codecs.open(directori+u'Evolució i estructura de la població post.txt', encoding='utf-8', mode= "r")
	while True :
		linia_entrada = fitxer_entrada.readline()
		if len(linia_entrada) < 3 : 
			fitxer_entrada.close()
			return dades
		linia_entrada = eval(linia_entrada)
		dic = {}
		dadescaixa = carregadiccionari2(Dadestaula,linia_entrada["Insee"])
		if dadescaixa == "" :
			#print linia_entrada["Insee"]
			x = input('?')
		nom = dadescaixa["Nom"].decode("utf-8")
		dic['nom'] = nom
		dic['habitants'] = eval(linia_entrada["Pobl07"])
		dades[linia_entrada["Insee"]] = dic
 
 
 
def carregadiccionari(fitxer,insee,seguent = False):
    global directori, llistaOberts, diccionariOberts, ultimes, evolucio
    print fitxer
    #if fitxer == u"Evolució i estructura de la població post.txt" :
    #	if len(evolucio) > 0 :
    #		if evolucio[]
    try :
        abans = ultimes[fitxer]
        if abans["Insee"] == insee and seguent == False : return abans
    except :
        x = 1
        print "No hi ha abans", insee, fitxer
    try :
        #ja n'hi ha
        if fitxer in llistaOberts :
            #Agafar-lo
            fitxer_entrada = diccionariOberts[fitxer]
        else :
            #Obrir-lo
            fitxer_entrada = codecs.open(directori+fitxer, encoding='utf8', mode= "r")
            diccionariOberts[fitxer] = fitxer_entrada
            llistaOberts.append(fitxer)
    except :
        #Primera vegada
        evolucio = ''
        llistaOberts = []
        diccionariOberts = {}
        ultimes = {}
        fitxer_entrada = codecs.open(directori+fitxer, encoding='utf8', mode= "r")
        diccionariOberts[fitxer] = fitxer_entrada
        llistaOberts.append(fitxer)
    #fitxer_entrada = codecs.open(directori+fitxer, encoding='utf8', mode= "r")
    linia_entrada = eval(fitxer_entrada.readline())
    if fitxer == "Age quinquenal post.txt" : linia_entrada["Insee"] = linia_entrada["Departament"] + linia_entrada["Comuna"]
    while linia_entrada["Insee"] < insee :
        linia_entrada = eval(fitxer_entrada.readline())
        #print linia_entrada
        if fitxer == "Age quinquenal post.txt" : linia_entrada["Insee"] = linia_entrada["Departament"] + linia_entrada["Comuna"]
        if len(linia_entrada) < 3 : return ""
    if seguent == True :
        linia_entrada = eval(fitxer_entrada.readline())
        if fitxer == "Age quinquenal post.txt" : linia_entrada["Insee"] = linia_entrada["Departament"] + linia_entrada["Comuna"]
        if len(linia_entrada) < 3 : return ""
    #print linia_entrada["Insee"], insee
    if seguent == False and insee != linia_entrada["Insee"] : return ""
    #print linia_entrada
    # alerta que no sempre hi ha nom linia_entrada["Nom"] = linia_entrada["Nom"] #.decode("usc-2")
    #print linia_entrada
    if fitxer == u"Evolució i estructura de la població post.txt" :
        evolucio = linia_entrada
    ultimes[fitxer] = linia_entrada
 
    return linia_entrada
 
def distVincenty(lat1, lon1, lat2, lon2):
  #Calcula la distància entre dos punts a partir de les latituds i longituds expressades en graus.
  #Fa servir l'algorisme de Vicenty. Vegueu http://ca.wikipedia.org/wiki/F%C3%B3rmules_de_Vincenty
  a = 6378137
  b = 6356752.314245
  f = 1/298.257223563
  L = math.radians(lon2-lon1)
  U1 = math.atan((1-f) * math.tan(math.radians(lat1)))
  U2 = math.atan((1-f) * math.tan(math.radians(lat2)))
  sinU1 = math.sin(U1)
  cosU1 = math.cos(U1)
  sinU2 = math.sin(U2)
  cosU2 = math.cos(U2)
  lamda = L
  lambdaP = 100
  while abs(lamda-lambdaP) > 1e-12:
    sinLambda = math.sin(lamda)
    cosLambda = math.cos(lamda)
    sinSigma = ((cosU2*sinLambda) * (cosU2*sinLambda) + (cosU1*sinU2-sinU1*cosU2*cosLambda) * (cosU1*sinU2-sinU1*cosU2*cosLambda))**0.5
    if (sinSigma==0): return 0
    cosSigma = sinU1*sinU2 + cosU1*cosU2*cosLambda
    sigma = math.atan2(sinSigma, cosSigma)
    sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma
    cosSqAlpha = 1 - sinAlpha*sinAlpha
    if cosSqAlpha != 0:
       cos2SigmaM = cosSigma - 2*sinU1*sinU2/cosSqAlpha
    else :
       cos2SigmaM = 0 # linia equatorial
    C = f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha))
    lambdaP = lamda
    lamda = L + (1-C) * f * sinAlpha * (sigma + C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)))
  uSq = cosSqAlpha * (a*a - b*b) / (b*b)
  A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)))
  B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq)))
  deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)- B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)))
  s = b*A*(sigma-deltaSigma)
  return s
 
 
def llegeixproperes():
    #Llegeix un fitxer on cada línia és una llista de lliestes. corresponent a les ciutats mes properes a cada una
    #retorna una diccionari que a cada codi insee li correspon la llista de llistes.
 
    fitxer = u'Properes.txt'
 
    fitxer_entrada = open(fitxer, "rt")
    resultat = {}
    while True:
        linia_entrada = fitxer_entrada.readline()
        if not linia_entrada:
            break
        if len(linia_entrada) <5 : continue
        properes = eval(linia_entrada)
        insee = properes[0][1]
        resultat[insee] = properes
    return resultat
 
def pixels(h):
    #determina la mida del punt que indica la població en funció del nombre d'habitants.
    mida = 6
    if h >= 500 : mida = 8
    if h >= 1000 : mida = 10
    if h >= 2000 : mida = 12
    if h >= 3000 : mida = 14
    if h >= 5000 : mida = 16
    if h >= 10000 : mida = 18
    if h >= 20000 : mida = 20
    return mida
 
 
def posa_escala(properes, insee, dades):
    imatge1 = 'Fitxer:Small-city-symbol.svg'
    imatge2 = 'Fitxer:Dot-yellow.svg'
    properes = properes[insee]
    dismax = 0
    for ciutat in properes :
        if ciutat[0] > dismax : dismax = ciutat[0]
    distancia_escala = 1000*(math.trunc(dismax/1000) + 1)
    lat1 = eval(properes[0][2])
    lon1 = eval(properes[0][3])
    grauy = distVincenty(lat1, lon1, lat1+1, lon1)
    graux = distVincenty(lat1, lon1, lat1, lon1+1)
    text = ''
    for ciutat in properes :
        insee = ciutat[1]
        distancia = ciutat[0]
        if distancia == 0 :
            text = dades[insee]['nom']+"|]]'''"+dades[insee]['nom']+"'''}}\n"
            continue
        mida = pixels(dades[insee]['habitants'])
        y = format(0.515+0.47*grauy*(-eval(ciutat[2])+lat1)/distancia_escala - 0.0014*mida)
        x = format(0.525+0.465*graux*(eval(ciutat[3])-lon1)/distancia_escala - 0.0012*mida )
        if mida == 20 :
            fitxer = imatge2
        else :
            fitxer = imatge1
        distancia = format(round(distancia/1000,1))
        cercapunt = re.compile('\.')
        distancia = cercapunt.sub(',',distancia)
        text = text + u"{{Image label|x=" + x + u"|y=" + y + u"|scale=400|text=[[" + fitxer+ u"|" + format(mida) + u"px|Població amb " + format(dades[insee]['habitants']) + u" habitants (2000)]]{{mida|80%|[[" + dades[insee]['nom'] + u"|]] (" + distancia + u"km)}}}}\n"
    return text
 
 
 
 
def diana(dades,insee):
    #COnstrueix la diana amb les ciutats mes properes.
    imatge1 = 'Fitxer:Small-city-symbol.svg'
    imatge2 = 'Fitxer:Dot-yellow.svg'
    capcalera = u'''<div style="position: relative; float:left; width:450px;">
    [[Fitxer:Blank map.svg|400px|left|enllaç=|Distàncies i posició relativa d'algunes poblacions]] 
    {{Image label|x=0.506|y=0.495|scale=400|text=[[Fitxer:Map pointer black.svg|20px|'''
    peu = u'</div><br clear=left>'
    properes = llegeixproperes()
    text = posa_escala(properes,insee,dades)
    text = capcalera + text + peu
    text = u'''== Poblacions més properes ==
El següent diagrama mostra les poblacions més properes.
 
''' + text
    return text
 
 
 
def poblacio(insee,seguent = False) :
    global superficie, nom, deNom, dades
    families = carregadiccionari(u"Familia situació matrimonial post.txt",insee, seguent)
    poblacio = carregadiccionari(u"Evolució i estructura de la població post.txt",insee, seguent)
    print '338', poblacio
    superficie = poblacio["Superfi"]
    poblacio62 = carregadiccionari(u"poblacio i habitatges des de 1962 post.txt",insee, seguent)
    nom = dades[poblacio['Insee']]['nom']
    text = u'''=== Població ===
El 2007 la població de fet '''
    if nom[0] in u"AEIOUÁÉÍÓUÀÈÌÒÙ" :
        text = text + u"d'" + nom
        deNom = "d'"
    else:
        text = text + u"de " + nom
        deNom = "de "
    text = text + u' era de ' + '{:n}'.format(eval(poblacio["Pobl07"]))+ ' persones.'
 
    maxim = max([eval(poblacio62["Poblacio62"]),eval(poblacio["Pobl68"]),eval(poblacio["Pobl75"]),eval(poblacio["Pobl82"]),eval(poblacio["Pobl90"]),eval(poblacio["Pobl99"]),eval(poblacio["Pobl07"])])
 
    if   maxim >= 0         and maxim <=     50 : fins, inc1, inc2 =       50, 5, 1
    elif maxim > 50       and maxim <=      100 : fins, inc1, inc2 =      100, 5, 1
    elif maxim > 100      and maxim <=      250 : fins, inc1, inc2 =      250, 50, 10
    elif maxim > 250      and maxim <=      500 : fins, inc1, inc2 =      500, 50, 10
    elif maxim > 500      and maxim <=     1000 : fins, inc1, inc2 =     1000, 50, 10
    elif maxim > 1000     and maxim <=     2500 : fins, inc1, inc2 =     2500, 500, 100
    elif maxim > 2500     and maxim <=     5000 : fins, inc1, inc2 =     5000, 500, 100
    elif maxim > 5000     and maxim <=    10000 : fins, inc1, inc2 =    10000, 500, 100
    elif maxim > 10000    and maxim <=    25000 : fins, inc1, inc2 =    25000, 5000, 1000
    elif maxim > 25000    and maxim <=    50000 : fins, inc1, inc2 =    50000, 5000, 1000
    elif maxim > 50000    and maxim <=   100000 : fins, inc1, inc2 =   100000, 5000, 1000
    elif maxim > 100000   and maxim <=   250000 : fins, inc1, inc2 =   250000, 50000, 10000
    elif maxim > 250000   and maxim <=   500000 : fins, inc1, inc2 =   500000, 50000, 10000
    elif maxim > 500000   and maxim <=  1000000 : fins, inc1, inc2 =  1000000, 50000, 10000
    elif maxim > 1000000  and maxim <=  2500000 : fins, inc1, inc2 =  2500000, 500000, 100000
    elif maxim > 2500000  and maxim <=  5000000 : fins, inc1, inc2 =  5000000, 500000, 100000
    elif maxim > 5000000  and maxim <= 10000000 : fins, inc1, inc2 = 10000000, 500000, 100000
    elif maxim > 10000000                       : fins, inc1, inc2 = 25000000, 5000000, 1000000
 
    text = text + fraseFamilies(families)
 
    text = text + u'''
 
La població ha evolucionat segons el següent gràfic:<ref>[http://www.insee.fr/fr/themes/detail.asp?reg_id=99&ref_id=poplog-com Population et logements par commune depuis le recensement de 1962 (1961 pour les Dom) à 1999]</ref>
 
''Habitants censats''
<timeline>
Colors=
  id:lightgrey value:gray(0.9)
  id:darkgrey  value:gray(0.7)
  id:sfondo value:rgb(1,1,1)
  id:barra value:rgb(0.6,0.7,0.8)
 
ImageSize  = width:350 height:373
PlotArea   = left:50 bottom:50 top:30 right:30
DateFormat = x.y
Period     = from:0 till:''' + format(fins) + u'''
TimeAxis   = orientation:vertical
AlignBars  = justify
ScaleMajor = gridcolor:darkgrey increment:''' + format(inc1) + u''' start:0
ScaleMinor = gridcolor:lightgrey increment:''' + format(inc2) + u''' start:0
BackgroundColors = canvas:sfondo
 
BarData=
  bar:1962 text:1962
  bar:1968 text:1968
  bar:1975 text:1975
  bar:1982 text:1982
  bar:1990 text:1990
  bar:1999 text:1999
  bar:2007 text:2007
 
PlotData=
  color:barra width:30 align:left'''
    text = text +'''
 
  bar:1962 from:0 till: '''+poblacio62["Poblacio62"]+'''
  bar:1968 from:0 till: '''+poblacio["Pobl68"]+'''
  bar:1975 from:0 till: '''+poblacio["Pobl75"]+'''
  bar:1982 from:0 till: '''+poblacio["Pobl82"]+'''
  bar:1990 from:0 till: '''+poblacio["Pobl90"]+'''
  bar:1999 from:0 till: '''+poblacio["Pobl99"]+'''
  bar:2007 from:0 till: '''+poblacio["Pobl07"]+'''
 
PlotData=
 
  bar:1962 at: '''+poblacio62["Poblacio62"]+''' fontsize:S text: '''+poblacio62["Poblacio62"]+''' shift:(-8,5)
  bar:1968 at: '''+poblacio["Pobl68"]+''' fontsize:S text: '''+poblacio["Pobl68"]+''' shift:(-10,5)
  bar:1975 at: '''+poblacio["Pobl75"]+''' fontsize:S text: '''+poblacio["Pobl75"]+''' shift:(-10,5)
  bar:1982 at: '''+poblacio["Pobl82"]+''' fontsize:S text: '''+poblacio["Pobl82"]+''' shift:(-10,5)
  bar:1990 at: '''+poblacio["Pobl90"]+''' fontsize:S text: '''+poblacio["Pobl90"]+''' shift:(-10,5)
  bar:1999 at: '''+poblacio["Pobl99"]+''' fontsize:S text: '''+poblacio["Pobl99"]+''' shift:(-10,5)
  bar:2007 at: '''+poblacio["Pobl07"]+''' fontsize:S text: '''+poblacio["Pobl07"]+u''' shift:(-10,5)
 
TextData=
  fontsize:S pos:(20,20)
  text:font INSEE - el·laboració gràfica pròpia
 
</timeline><noinclude>'''
    return text, poblacio['Insee']
 
#poblacio("01005")
 
def cercaPrimeriUltim(llista):
    primer = -1
    conta = 0
    for element in llista :
        if element != '0' and primer == -1 : primer = conta
        if element != '0' : ultim = conta
        conta +=1
    return primer, ultim
 
def habitatges(insee,seguent = False) :
    habitatges = carregadiccionari(u"Habitatges post.txt",insee, seguent)
 
    frase1 = fraseHabitatgesUs(habitatges)
    if frase1 == '' : return ''
    frase2 = fraseHabitatgesTipus(habitatges)
    frase3 = fraseOcupacioVivendes(habitatges)
    frase4 = fraseCambres2(habitatges)
    frase5 = ' ' + '{:n}'.format(eval(habitatges["AmbParquing"])) + u''' habitatges disposaven pel capbaix d'una plaça de pàrquing.'''
    frase6 = ' A ' + '{:n}'.format(eval(habitatges["UnAuto"]))+ u''' habitatges hi havia un automòbil'''
    frase7 = u' i a ' + '{:n}'.format(eval(habitatges["DosOmesAuto"])) +  u" n'hi havia dos o més."
    if habitatges["AmbParquing"] == '' : u"Cap dels habitatges diposava de plaça de pàrking"
    if habitatges["UnAuto"] == '0' : frase6 = ''
    if frase6 == '' : frase7 = ' A ' + '{:n}'.format(eval(habitatges["DosOmesAuto"])) +  u" habitatges hi havia dos o més automòbils."
    text = u"=== Habitatges ===\n" + frase1 + frase2 + frase3 + frase4 + frase5 + frase6 + frase7
    text = text + u"<ref>[http://www.insee.fr/fr/themes/detail.asp?reg_id=99&ref_id=base-cc-logement Logement, 1968-2007]]</ref>"
 
    return text
 
def formateja(dades) :
	sortida = []
	for dada in dades :
		if dada == '' : 
			sortida.append(dada)
			continue
		if not ',' in dada :
			sortida.append('{:n}'.format(eval(dada)))
		else :
			sortida.append(dada)
	return sortida
 
def composatext3(dades, instrucions, dadesDetall = '') :
	global nom, DS, DP
	cercaNom = re.compile('\[Nom\]')
	US, UP, AC, PS, PP, IS, IP, FS, FP = cercainstruccions(instrucions)
	#print 'DS', DS
	#print 'DP', DP
	#print 'dades detall', dadesDetall
 
	#Composa un text on s'explica la composició d'una dada basada en una llista de dades que sumen el seu valor.
	if dades[0] == '0' : return ''
	detall = []
	for dada in dades : detall.append(u'')
	i = 0
	if len(dadesDetall) > 0 : dadesDetall = formateja(dadesDetall)
	while True :
		if len(dadesDetall) == 2*i : break
		linia = u'('
		if dadesDetall[2*i] == '1' : linia = linia + DS[0][i]+dadesDetall[2*i]+DS[1][i]
		if dadesDetall[2*i] > '1'  : linia = linia + DP[0][i]+dadesDetall[2*i]+DP[1][i]
 
		if dadesDetall[2*i] == '0' and dadesDetall[2*i+1] == '1' : linia = linia + dadesDetall[2*i+1]+DS[3][i]
		if dadesDetall[2*i] == '0' and dadesDetall[2*i+1] > '1'  : linia = linia + dadesDetall[2*i+1]+DP[3][i]		
 
		if dadesDetall[2*i+1] == '1' : linia = linia + DS[2][i]+dadesDetall[2*i+1]+DS[3][i]
		if dadesDetall[2*i+1] > '1'  : linia = linia + DP[2][i]+dadesDetall[2*i+1]+DP[3][i]
		linia = linia + u')'
		if len(linia) == 2 : linia = ''
		detall[i] = linia
		i +=1
 
	primer, ultim = cercaPrimeriUltim(dades[1:])
	dades = formateja(dades)
	acumulat = dades[0]
	dades = dades[1:]
	if acumulat == '1' : 
		frase = US[0][0]+US[1][primer]+US[2][0] + detall[primer]
		frase = cercaNom.sub(nom,frase)
		return frase
	if primer == ultim : 
		frase = UP[0][0]+ acumulat + UP[1][0] + UP[2][primer] + detall[primer] + UP[3][0]
		frase = cercaNom.sub(nom,frase)
		return frase
	frase = ''
	if len(AC[0][0]) + len(AC[1][0]) > 0 : frase = AC[0][0] + acumulat + AC[1][0]
	if dades[primer] == '1' :
		frase = frase +  PS[0][0] + PS[1][primer] + PS[2][0] + dades[primer] + PS[3][0] + PS[4][primer] + PS[5][0] + detall[primer]
	else :
		frase = frase +  PP[0][0] + PP[1][primer] + PP[2][0] + dades[primer] + PP[3][0] + PP[4][primer] + PP[5][0] + detall[primer]
	i = primer + 1
	while i < ultim :
		if dades[i] == '0' : 
			frase = frase
		elif dades[i] == '1' :
			frase = frase + IS[0][0] + IS[1][i] + IS[2][0] + dades[i] + IS[3][0] + IS[4][i] + IS[5][0] + detall[i]
		else :
			frase = frase + IP[0][0] + IP[1][i] + IP[2][0] + dades[i] + IP[3][0] + IP[4][i] + IP[5][0] + detall[i]
		i += 1
	'''print ultim
	print FP, dades
	print FP[0][0]
	print FP[1][ultim]
	print FP[2][0]
	print dades[ultim]
	print FP[3][0]
	print FP[4][ultim]
	print FP[5][0]'''
	if dades[ultim] == '1' :
		frase = frase + FS[0][0] + FS[1][ultim] + FS[2][0] + dades[ultim] + FS[3][0] + FS[4][ultim] + FS[5][0] + detall[ultim]
	else :
		frase = frase + FP[0][0] + FP[1][ultim] + FP[2][0] + dades[ultim] + FP[3][0] + FP[4][ultim] + FP[5][0] + detall[ultim]
	frase = cercaNom.sub(nom,frase)
	return frase
 
def fraseFamilies(families) :
	global instrucFamilies
	dades = ['0', format(eval(families["LlarHomeSol"])+eval(families["LlarDonaSola"])), families["ParellaSenseF"], families["ParellaAmbF"], families["FamMono"]]
	total = 0
	for dada in dades : total = total + eval(dada)
	dades[0] = format(total)
	dadesDetall=[families["LlarHomeSol"],families["LlarDonaSola"],'','','','','','' ]
	frase = composatext3(dades, instrucFamilies, dadesDetall )
	return frase
 
'''    text = text+format(eval(families["Llars"])+eval(families["LlarBuida"]))
    text = text +u' famílies de les quals ' + format(eval(families["LlarHomeSol"])+eval(families["LlarDonaSola"]))
    text = text + ' eren unipersonals ('+ families["LlarHomeSol"] + ' homes vivint sols i '
    text = text + families["LlarDonaSola"] + ' dones vivint soles), '+ families["ParellaSenseF"] +' eren parelles sense fills, '
    text = text + families["ParellaAmbF"] +' parelles amb fills i '+ families["LlarHomeSol"]
    text = text''' '''+u''' '''famílies monoparentals amb fills.'''''''''
 
 
def fraseHabitatgesUs(habitatges) :
	global instrucHabitatgesUs
	dades = [ habitatges["Habitatges"], habitatges["ResiPrinci"], habitatges["ResiSecond"], habitatges["HabiDesoc"] ]
	frase = composatext3(dades, instrucHabitatgesUs)
	return frase
 
def fraseHabitatgesTipus(habitatges) :	
	global instrucHabitatgesTipus
	dades = [ format(eval(habitatges["Cases"]) + eval(habitatges["Apartaments"])), habitatges["Cases"], habitatges["Apartaments"] ]
	frase = composatext3(dades, instrucHabitatgesTipus)
	return frase
 
def fraseOcupacioVivendes(habitatges) :
	global instrucOcupacioHabitatges
	dades = habitatges["ResiPrinci"], habitatges["OcupPropiet"], habitatges["Llogaters"], habitatges["CedidGatis"]
	frase = composatext3(dades, instrucOcupacioHabitatges)
	return frase
 
def fraseCambres2(habitatges) :
	global instrucCambres
	total = eval(habitatges["UnaCambra"])+eval(habitatges["DuesCambres"])+eval(habitatges["TresCambres"])+eval(habitatges["QuatreCambres"])+eval(habitatges["CincOmesCambres"])
	dades = format(total), habitatges["UnaCambra"],habitatges["DuesCambres"],habitatges["TresCambres"],habitatges["QuatreCambres"],habitatges["CincOmesCambres"]
	frase = composatext3(dades, instrucCambres)
	return frase
 
def fraseEmpreses(empreses) :
	global instrucEmpreses
	claus = empreses.keys()
	for clau in claus :
		if empreses[clau] == '' : empreses[clau] = '0'
	total = eval(empreses["Extractives"]) + eval(empreses["Alimentaries"])+eval(empreses["CocIrefinatge"])
	total = total + eval(empreses["Electric"])+eval(empreses["MatTrasport"])+eval(empreses["ALtresProductes"])
	total = total + eval(empreses["Construccio"])+eval(empreses["ComecIrepAutomob"])+eval(empreses["Transport"])
	total = total + eval(empreses["HostaliRestaur"])+eval(empreses["InformacIcom"])+eval(empreses["Financeres"])
	total = total + eval(empreses["Immobiliaries"])+eval(empreses["ActivCientifItec"])+eval(empreses["SectorPublic"])
	total = total + eval(empreses["AltresServeis"])
	dades = format(total),empreses["Extractives"],empreses["Alimentaries"],empreses["CocIrefinatge"],empreses["Electric"],empreses["MatTrasport"],empreses["ALtresProductes"],empreses["Construccio"],empreses["ComecIrepAutomob"],empreses["Transport"],empreses["HostaliRestaur"],empreses["InformacIcom"],empreses["Financeres"],empreses["Immobiliaries"],empreses["ActivCientifItec"],empreses["SectorPublic"],empreses["AltresServeis"]
	frase = composatext3(dades, instrucEmpreses)
	return frase
 
def fraseServeis(serveis):
	global instrucServeis
	dades = ['0',serveis["Police"],serveis["Tresorerie"],serveis["Poleemploi"],serveis["Gendarmerie"],serveis["Bureaudeposte"],serveis["BanqueCaissedEpargne"],serveis["Pompesfunebres"],serveis["Reparationautoetdematerielagricole"],serveis["Controletechniqueautomobile"],serveis["Locationautoutilitaireslegers"],serveis["Ecoledeconduite"],serveis["Macon"],serveis["Platrierpeintre"],serveis["Menuisiercharpentierserrurier"],serveis["Plombiercouvreurchauffagiste"],serveis["Electricien"],serveis["Entreprisegeneraledubatiment"],serveis["Coiffure"],serveis["Veterinaire"],serveis["Agencedetravailtemporaire"],serveis["Restaurant"],serveis["Agenceimmobiliere"],serveis["BlanchisserieTeinturerie"],serveis["Soinsdebeaute"]]
	total = 0
	for dada in dades : total = total + eval(dada)
	dades[0] = format(total)
	frase = composatext3(dades, instrucServeis)
	return frase
 
def fraseComerc(comerc) :
	global instrucComerc
	dades = ['0',comerc["Hiper"],comerc["Supermercat"],comerc["GransperfBrico"],comerc["BotigaGran"],comerc["BotigaPetita"],comerc["Fleca"],comerc["Carnisseria"],comerc["Congelats"],comerc["Peixateria"],comerc["Llibreria"],comerc["Roba"],comerc["EquipamentLlar"],comerc["Sabateria"],comerc["Electrodomestic"],comerc["Mobles"],comerc["Esport"],comerc["RevestimentsPared"],comerc["Drogueria"],comerc["Perfumeria"],comerc["Joieria"],comerc["Floristeria"]]
	total = 0
	for dada in dades : total = total + eval(dada)
	dades[0] = format(total)
	frase = composatext3(dades, instrucComerc)
	return frase
 
 
def fraseSanitari(sanitari) :
	global instrucSanitari
	dades = ['0',sanitari["HospitalCurt"],sanitari["HospitalMig"],sanitari["HospitalLlarg"],sanitari["Psiquiatric"],sanitari["Cancer"],sanitari["Urgencies"],sanitari["Maternitat"],sanitari["CentreSalut"],sanitari["Farmacia"],sanitari["Ambulancia"]]
	total = 0
	for dada in dades : total = total + eval(dada)
	dades[0] = format(total)
	frase = composatext3(dades, instrucSanitari)
	return frase	
 
def fraseEscolesElemental(elemental):
	global instrucEscolesElemental
	dades = ['0',elemental["Maternal"],elemental["MaternalDispersa"],elemental["Elemental"],elemental["ElementalDispersa"]]
	total = 0
	for dada in dades : total = total + eval(dada)
	dades[0] = format(total)	
	frase = composatext3(dades, instrucEscolesElemental)
	return frase
 
def fraseEscolesSecundari(secundari) :
	global instrucCentresSecundaria, instrucAlumnesSecundaria
	dades = ['0',secundari["Colegi"],secundari["LiceuGeneral"], secundari["LiceuTecnologic"]]
	total = 0
	for dada in dades : total = total + eval(dada)
	dades[0] = format(total)	
	frase1 = composatext3(dades, instrucCentresSecundaria)
 
	dades = ['0',secundari["ColegiAlumnes"],secundari["LiceuGeneralAlumnes"],secundari["LiceuTecnologicAlumnes"]]
	total = 0
	for dada in dades : total = total + eval(dada)
	dades[0] = format(total)
	frase2 = composatext3(dades, instrucAlumnesSecundaria)
 
	return frase1 + frase2
 
def fraseEscolesSuperior(superior) :
	global instrucSuperiorNoUni, instrucSuperiorUni
	dades = ['0',superior["SuperiorNoUniv1"],superior["SuperiorNoUniv2"],superior["SuperiorNoUniv3"],superior["SuperiorNoUniv9"]]
	total = 0
	for dada in dades : total = total + eval(dada)
	dades[0] = format(total)
	frase1 = composatext3(dades, instrucSuperiorNoUni)
 
	dades = ['0',superior["SuperiorUniv1"],superior["SuperiorUniv2"],superior["SuperiorUniv3"],superior["SuperiorUniv4"],superior["SuperiorUniv9"]]
	total = 0
	for dada in dades : total = total + eval(dada)
	dades[0] = format(total)
	frase2 = composatext3(dades, instrucSuperiorUni)
 
	return frase1 + frase2
 
def fraseTreball(feina) :
 
	global instrucTreballadors, instrucActius, instrucInactius	
	actius = format(eval(feina["ActiusHomes"])+eval(feina["ActiusDones"]))
	ocupats = format(eval(feina["OcupatsHomes"])+eval(feina["OcupatsDones"]))
	aturats = format(eval(feina["AturatsHomes"])+eval(feina["AturatsDones"]))
	inactius = format(eval(feina["Estudiants"])+eval(feina["AltresIncatius"])+eval(feina["Jubilats"]))
	poblac = format(eval(actius)+eval(inactius))
 
	dades = [poblac, actius, inactius]
	frase1 = composatext3(dades, instrucTreballadors)
 
	dades = [actius, ocupats, aturats]
	dadesDetall = [feina["OcupatsHomes"], feina["OcupatsDones"], feina["AturatsHomes"], feina["AturatsDones"]]
	frase2 = composatext3(dades, instrucActius, dadesDetall)
 
	dades = [inactius, feina["Jubilats"], feina["Estudiants"], feina["AltresIncatius"]]
	frase3 = composatext3(dades, instrucInactius)
 
	return frase1 + frase2 + frase3
 
 
 
def piramide(insee,seguent = False) :
	global nom
	poblacio = carregadiccionari(u"Age quinquenal post.txt",insee, seguent)
	maxim = max([eval(poblacio["Homes0a4"]),eval(poblacio["Dones0a4"]),eval(poblacio["Homes5a9"]),eval(poblacio["Dones5a9"]),eval(poblacio["Homes10a14"]),eval(poblacio["Dones10a14"]),eval(poblacio["Homes15a19"]),eval(poblacio["Dones15a19"]),eval(poblacio["Homes20a24"]),eval(poblacio["Dones20a24"]),eval(poblacio["Homes25a29"]),eval(poblacio["Dones25a29"]),eval(poblacio["Homes30a34"]),eval(poblacio["Dones30a34"]),eval(poblacio["Homes35a38"]),eval(poblacio["Dones35a39"]),eval(poblacio["Homes40a44"]),eval(poblacio["Dones40a44"]),eval(poblacio["Homes45a49"]),eval(poblacio["Dones45a49"]),eval(poblacio["Homes50a54"]),eval(poblacio["Dones50a54"]),eval(poblacio["Homes55a59"]),eval(poblacio["Dones55a59"]),eval(poblacio["Homes60a64"]),eval(poblacio["Dones60a64"]),eval(poblacio["Homes65a69"]),eval(poblacio["Dones65a69"]),eval(poblacio["Homes70a74"]),eval(poblacio["Dones70a74"]),eval(poblacio["Homes75a79"]),eval(poblacio["Dones75a79"]),eval(poblacio["Homes80a84"]),eval(poblacio["Dones80a84"]),eval(poblacio["Homes85a90"]),eval(poblacio["Dones85a90"]),eval(poblacio["Homes90a94"]),eval(poblacio["Dones90a94"]),eval(poblacio["Homes95imes"]),eval(poblacio["Dones95imes"])])
	maxim = format(1.15*maxim)
	text = u'''=== Piràmide de població ===
La piràmide de població per edats i sexe al 2009 era:
 
{{Piràmide de població 2
|float=left
|width=50%
|maxvalue=''' + maxim + u'''
|bg=rgb(90%,90%,90%)
|border=1px solid black|margin-top=1ex
|caption=[[Piràmide de població]] de ''' + "'''" + nom + "'''" + u''' el [[2009]] <ref>{{Lien web|url=http://www.insee.fr/fr/themes/detail.asp?reg_id=99&ref_id=pop-sexe-age-quinquennal| títol =Population par sexe et âge quinquennal de 1968 à 1999|  site = http://www.recensement-2007.insee.fr | consultat = 13/07/2010}}</ref>.
|barcolor=rgb(70%,90%,70%)
|{{mida|80%|95 o +}}|''' + poblacio["Homes95imes"] + '|' + poblacio["Dones95imes"] + u'''
|{{mida|80%|90 a 94}}|''' + poblacio["Homes90a94"] + '|' + poblacio["Dones90a94"] + u'''
|{{mida|80%|85 a 89}}|''' + poblacio["Homes85a90"] + '|' + poblacio["Dones85a90"] + u'''
|{{mida|80%|80 a 84}}|''' + poblacio["Homes80a84"] + '|' + poblacio["Dones80a84"] + u'''
|{{mida|80%|75 a 79}}|''' + poblacio["Homes75a79"] + '|' + poblacio["Dones75a79"] + u'''
|{{mida|80%|70 a 74}}|''' + poblacio["Homes70a74"] + '|' + poblacio["Dones70a74"] + u'''
|{{mida|80%|65 a 69}}|''' + poblacio["Homes65a69"] + '|' + poblacio["Dones65a69"] + u'''
|{{mida|80%|60 a 64}}|''' + poblacio["Homes60a64"] + '|' + poblacio["Dones60a64"] + u'''
|{{mida|80%|55 a 59}}|''' + poblacio["Homes55a59"] + '|' + poblacio["Dones55a59"] + u'''
|{{mida|80%|50 a 54}}|''' + poblacio["Homes50a54"] + '|' + poblacio["Dones50a54"] + u'''
|{{mida|80%|45 a 49}}|''' + poblacio["Homes45a49"] + '|' + poblacio["Dones45a49"] + u'''
|{{mida|80%|40 a 44}}|''' + poblacio["Homes40a44"] + '|' + poblacio["Dones40a44"] + u'''
|{{mida|80%|35 a 39}}|''' + poblacio["Homes35a38"] + '|' + poblacio["Dones35a39"] + u'''
|{{mida|80%|30 a 34}}|''' + poblacio["Homes30a34"] + '|' + poblacio["Dones30a34"] + u'''
|{{mida|80%|25 a 29}}|''' + poblacio["Homes25a29"] + '|' + poblacio["Dones25a29"] + u'''
|{{mida|80%|20 a 24}}|''' + poblacio["Homes20a24"] + '|' + poblacio["Dones20a24"] + u'''
|{{mida|80%|15 a 19}}|''' + poblacio["Homes15a19"] + '|' + poblacio["Dones15a19"] + u'''
|{{mida|80%|10 a 14}}|''' + poblacio["Homes10a14"] + '|' + poblacio["Dones10a14"] + u'''
|{{mida|80%|5 a 9}}|''' + poblacio["Homes5a9"] + '|' + poblacio["Dones5a9"] + u'''
|{{mida|80%|0 a 4}}|''' + poblacio["Homes0a4"] + '|' + poblacio["Dones0a4"] + u'''
 
}}'''
 
 
 
	'''dades_interes = "Regio","Departament","Comuna","Nom","Homes0a4","Dones0a4","Homes5a9","Dones5a9","Homes10a14","Dones10a14","Homes15a19","Dones15a19","Homes20a24","Dones20a24","Homes25a29","Dones25a29","Homes30a34","Dones30a34","Homes35a38","Dones35a39","Homes40a44","Dones40a44","Homes45a49","Dones45a49","Homes50a54","Dones50a54","Homes55a59","Dones55a59","Homes60a64","Dones60a64","Homes65a69","Dones65a69","Homes70a74","Dones70a74","Homes75a79","Dones75a79","Homes80a84","Dones80a84","Homes85a90","Dones85a90","Homes90a94","Dones90a94","Homes95imes","Dones95imes"'''
 
	return text
 
def salaris(insee,seguent = False) :
	salaris = carregadiccionari(u"Salaris horaris mitjans post.txt",insee, seguent)
	frase = ""
	if salaris != "" :
		frase = u'''=== Salaris i ocupació ===
El 2007 el salari net horari mitjà era ''' + salaris["Salarimij"] 
		frase = frase + u'€/h en el cas del alts càrrecs era de ' 
		frase = frase + salaris['Quadres'] + u'''€/h
(''' + salaris["QuadresHomes"] + u'''€/h els homes i ''' + salaris["QuadresDones"] + u'''€/h les dones), el dels professionals intermedis ''' + salaris["Intermedis"] + u'''€/h (''' + salaris["IntermedisHomes"] + u'''€/
h els homes i ''' + salaris["IntermedisDones"] 
		frase = frase + u''' les dones), el dels empleats ''' +salaris["Empleats"] + u'''€/h (''' + salaris["EmpleatsHomes"] + u'''€/h els homes i ''' + salaris["EmpleatsDones"] + u'''€/h les
dones) i el dels obrers ''' + salaris["Obrers"] + u'''€/h (''' + salaris["ObrersHomes"] + u'''€/h els homes i ''' + salaris["ObrersDones"] + u'''€/h les dones).'''
		fase = frase + u'''<ref>[http://www.insee.fr/fr/bases-de-donnees/default.asp?page=statistiques-locales/sal-rev-act.htm Salaire net horaire moyen selon la catégorie socioprofessionnelle et le temps de travail]</ref>'''
 
	feina = carregadiccionari(u"Feina i població activa post.txt",insee, seguent)
	frase = frase + '\n\n' + fraseTreball(feina)
	frase = frase + u'''<ref>[http://www.insee.fr/fr/themes/detail.asp?reg_id=99&ref_id=base-cc-emploi-pop-active Emploi et population active 1999 et 2007]</ref>'''
	return frase
 
 
def ingressos(insee,seguent = False) :
	global nom
	ingressos = carregadiccionari(u"Unitats fiscals i ingressos post.txt",insee, seguent)
	print ingressos
	if ingressos["UnitFiscals"] == "" or eval(ingressos["UnitFiscals"]) == 0 : return ""
	persones = ingressos["PersonesUF"]
	renda = ingressos["MedianaIngres"]
	if ',' in persones : 
		persones = '{:n}'.format(eval(persones[:-2])) + ',5'
	else :
		persones = '{:n}'.format(eval(persones))
	if ',' in renda : 
		renda = '{:n}'.format(eval(renda[:-2])) + ',5'
	else :
		renda = '{:n}'.format(eval(renda))
 
	frase = u'''=== Ingressos ===
El 2009 a ''' + nom + u''' hi havia ''' + '{:n}'.format(eval(ingressos["UnitFiscals"])) + u''' unitats fiscals que integraven ''' + persones + u''' persones, la [[mediana]] anual d'ingressos fiscals per persona era de ''' + renda + u'''€. <ref>[http://www.insee.fr/fr/themes/detail.asp?reg_id=99&ref_id=base-cc-rev-fisc-loc-menage Revenus fiscaux des ménages en 2008]</ref>'''
	return frase
 
 
 
def activitatsEconomiques(insee,seguent = False) :
	global nom
	empreses = carregadiccionari(u"Empreses post.txt",insee, seguent)
	text  = fraseEmpreses(empreses)
	if len(text) > 0 : text = text + u'''<ref>[http://www.insee.fr/fr/themes/detail.asp?reg_id=99&ref_id=etab-com Créations et stock d'établissements par commune en 2009]</ref>'''
 
	serveis = carregadiccionari(u"Serveis 2009 post.txt",insee, seguent)
	frase = fraseServeis(serveis)
	if len(frase) > 0 : frase = frase + u'''<ref>[http://www.insee.fr/fr/bases-de-donnees/default.asp?page=statistiques-locales/car-ser.htm Nombre d'équipements des services aux particuliers]</ref>'''
	if len(text) > 0 : 
		if len(frase) > 0 : text = text + "\n\n" + frase
	else :
		text = frase
	comerc = carregadiccionari(u"Establiments comercials post.txt",insee, seguent)
	frase = fraseComerc(comerc)
	if len(frase) > 0 : frase = frase + u'''<ref>[http://www.insee.fr/fr/bases-de-donnees/default.asp?page=statistiques-locales/caracteristiques-commerce.htm Nombre d'équipements et de services dans le domaine du commerce en 2009]</ref>'''
	if len(text) > 0 : 
		if len(frase) > 0 : text = text + "\n\n" + frase
	else :
		text = frase
	agricola = carregadiccionari(u"Explotacions agricoles post.txt",insee, seguent)
	print agricola
	if agricola["SuperficieAgric2000"] == '' : agricola["SuperficieAgric2000"] = '0'
	if agricola["NobrExplAgr2000"] == '' : agricola["NobrExplAgr2000"] = '0'
	if len(agricola) == 0 or eval(agricola["NobrExplAgr2000"]) == 0:
		frase = ''
	else :
		if eval(agricola["SuperficieAgric2000"]) != 0 :
			frase =  u'''L'any 2000 a ''' + nom + u''' hi havia ''' + agricola["NobrExplAgr2000"] + u''' explotacions agrícoles que ocupaven un total de ''' + '{:n}'.format(eval(agricola["SuperficieAgric2000"])) + u''' hectàrees.<ref>[http://www.insee.fr/fr/bases-de-donnees/default.asp?page=statistiques-locales/exploitations-agricoles.htm Exploitations agricoles]</ref>'''
		else :
			frase =  u'''L'any 2000 a ''' + nom + u''' hi havia ''' + agricola["NobrExplAgr2000"] + u''' explotacions agrícoles.'''
	if len(text) > 0 :
		if len(frase) > 0 : text = text + '\n\n' + frase
	else :
		text = frase
	if len(text) >0 : text = u'=== Activitats ecomòmiques ===\n' + text
	return text
 
def economia(insee,seguent = False) :	
	frase1 = salaris(insee,seguent)
	frase2 = ingressos(insee,seguent)
	frase3 = activitatsEconomiques(insee,seguent)
	if frase1 == '' and frase2 == '' and frase3 == '' : return ''
	text = u'''== Economia =='''
	if frase1 != '' : text = text + '\n\n' + frase1
	if frase2 != '' : text = text + '\n\n' + frase2
	if frase3 != '' : text = text + '\n\n' + frase3
	return text
 
def demografia(insee,seguent = False) :
	global nom, deNom, dades
	frase1, inseeReal = poblacio(insee,seguent)
	nom = dades[inseeReal]['nom']
	frase2 = habitatges(insee,seguent)
	frase3 = piramide(insee,seguent)
	if frase1 == '' and frase2 == '' and frase3 == '' : return ''
	text = u'''== Demografia =='''
	if frase1 != '' : text = text + u'\n\n' + frase1
	if frase2 != '' : text = text + u'\n\n' + frase2
	if frase3 != '' : text = text + u'\n\n' + frase3
	return text, inseeReal
 
 
def sanitEscol(insee,seguent = False) :
	sanitari = carregadiccionari(u"Equipaments sanitaris post.txt",insee, seguent)
	frase1 = fraseSanitari(sanitari)
	elemental = carregadiccionari(u"BPE09_EnseignementDegre1_COM post.txt",insee, seguent)
	frase2 = fraseEscolesElemental(elemental)
	secundari = carregadiccionari(u"BPE09_EnseignementDegre2_COM post.txt",insee, seguent)
	frase3 = fraseEscolesSecundari(secundari)
	superior = carregadiccionari(u"BPE09_EnseignementSupAutres_COM post.txt",insee, seguent)
	frase4 = fraseEscolesSuperior(superior)
	if len(frase1) + len(frase2) + len(frase3) + len(frase4):
		text = u"== Equipaments sanitaris i escolars ==\n\n"
	else :
		text = ''
	if len(frase1) == 0 : 
		return text + frase2 + ' ' + frase3 + '\n\n' + frase4
	else :
		return text + frase1 + '\n\n' + frase2 + ' ' + frase3 + '\n\n' + frase4
 
def ifocaixa(insee,seguent = False) :
	global superficie, nom
	if superficie == 0 : x = poblacio(insee,seguent)
	dadescaixa = carregadiccionari(u"DadesTaula post.txt",insee, seguent)
	nom = dadescaixa["Nom"].decode("utf-8")
	dadesgps = carregadiccionari(u"Coordenades-1 post.txt",insee, seguent)
	if dadescaixa["batlle"] != '' :
		batlle = 'Batlle'
	else :
		batlle = ''
	if nom[0] in u'AEIOUÀÈÌÒÙÁÉÍÓÚ' : 
		nomDe = "d'"
	else :
		nomDe = "de "
	#print dadescaixa
	text = u'''{{Infotaula de municipi de França|''' + nomDe + u'''|'''+ dadescaixa["Nom"].decode("utf-8")
	text = text + u'''|
| escut=  '''
	text = text + dadescaixa["escut"] 
	text = text + u'''
| fotografia =  '''
	text = text + dadescaixa["imatge"] + u'''
| fotografia_descripció =  
| latitud = '''
	text = text + dadesgps["Latit"] + u'''
| longitud = '''
	text = text + dadesgps["Longi"] + u'''
| cantó = [[Cantó de Châtillon-sur-Chalaronne]]
| codi_insee = '''+ dadescaixa["Insee"] 
	text = text + u'''
| codi_postal = '''+ dadescaixa["codipostal"] + u'''
| dirigent_tipus1 = ''' + batlle + u'''
| dirigent1 = '''+ dadescaixa["batlle"] 
	text = text + u'''
| superfície = ''' + superficie + u'''
| web = ''' 
	text = text + dadescaixa["web"] 
	text = text + u'''
}}'''
	superficie = 0
	return text 
 
def referencies(insee,nom) :
 
	if nom[0] in u"AEIOUÁÉÍÓUÀÈÌÒÙ" :
		poble = u"d'" + nom
	else:
		poble = u"de " + nom
	text = u'''
== Referències ==
{{referències}}
{{refbegin}}
*[http://www.statistiques-locales.insee.fr/FICHES%5CRS%5CDEP%5C''' + insee[0:2] + u'''%5CCOM%5CRS_COM''' + insee + u'''.pdf Résumé statistique] Fitxa resum de dades estadístiques ''' + poble + u''' a l'[[INSEE]].
*[http://www.statistiques-locales.insee.fr/FICHES%5CDL%5CDEP%5C'''+ insee[0:2] + u'''%5CCOM%5CDL_COM''' + insee + u'''.pdf Évolution et structure de la population] Fitxa amb el detall de dades ''' + poble + u''' a l'[[INSEE]]
*[http://www.statistiques-locales.insee.fr/carto/ESL_CT_cartethematique.asp?lang=FR&nivgeo=COM France par comune] Dades detallades de totes les comunes de França accessibles a partir del mapa.
{{refend}}
'''
	return text
 
def introducio(insee,seguent) :
	global dades, nom, nomDepartament
	if insee[0:2] == '97' :
		codiDep = insee[0:3]
	else :
		codiDep = insee[0:2]
	cercanom = re.compile('([^A-Z]*)([A-Z].*)')
	departament = cercanom.sub(r'\1[[\2]]',nomDepartament[codiDep])
	text = "'''" + nom + u"''' és un [[municipi]] [[França|francès]], situat al departament "
	text = text + departament + u''' i a la regió de [[{{Padró INSEE/Nom de regió|{{Padró INSEE/Regió|{{Padró INSEE/Departament|''' +insee+u'''}}}}}}]]. L'any [[2007]] tenia '''
	text = text + '{:n}'.format(dades[insee]['habitants']) +" habitants."
	return text
 
 
def articleSencer(insee, seguent=False) :
	global dades, nom, nomDepartament, deNom
	if insee[0:2] == '97' :
		codiDep = insee[0:3]
	else :
		codiDep = insee[0:2]
	nom = 'nom'
	regio = 'regio'
	nomfr = 'nomfr'
	text1, inseeReal = demografia(insee,seguent)
	insee = inseeReal
	nom = dades[insee]["nom"]
	seguent=False
	text = ifocaixa(insee,seguent)
	text = text + '\n' + introducio(insee,seguent)
	text = text + '\n\n' + text1
	text = text + '\n\n' + economia(insee,seguent)
	text = text + '\n\n' + sanitEscol(insee,seguent)
	text = text + '\n\n' + diana(dades,insee)
	text = text + '\n\n' + referencies(insee,nom)
	lloc = nom.find(' (')
	if lloc > -1 : text = text.replace(nom,nom[0:lloc])
	text = text + '\n\n' + '[[Categoria:Municipis ' + nomDepartament[codiDep] + ']]'
	text = text + '\n\n' + '[[fr:' + nom + ']]'
	return text, inseeReal
 
def agafaParametres(boci) :
	cercalinies=re.compile('.+?(?=\n)')
	linies = cercalinies.findall(boci)
	llista = []
	for linia in linies :
		if not ':' in linia : continue
		cercaParametre = re.compile('(?<=:)[^:]*?(?=:)')
		parametres = cercaParametre.findall(linia)
		llista.append(parametres)
	return llista
 
def cercainstruccions(instruc) :
	global DS, DP
	cercaUS = re.compile('unicSingular *= *([^ ]*?)(?=\n\n)')
	cercaUP = re.compile('unicPlural *= *([^ ]*?)(?=\n\n)')
	cercaAC = re.compile('acumulat *= *([^ ]*?)(?=\n\n)')
	cercaPS = re.compile('Primer Singular *= *([^ ]*?)(?=\n\n)')
	cercaPP = re.compile('Primer Plural *= *([^ ]*?)(?=\n\n)')
	cercaIS = re.compile('Intermedi Singular *= *([^ ]*?)(?=\n\n)')
	cercaIP = re.compile('Intermedi Plural *= *([^ ]*?)(?=\n\n)')
	cercaFS = re.compile(u'Últim Singular *= *([^ ]*?)(?=\n\n)')
	cercaFP = re.compile(u'Últim Plural *= *([^ ]*?)(?=\n\n)')
 
	cercaDS = re.compile(u'Detall Singular *= *([^ ]*?)(?=\n\n)')
	cercaDP = re.compile(u'Detall Plural *= *([^ ]*?)(?=\n\n)')
 
	US = agafaParametres(cercaUS.findall(instruc)[0]+'\n')
	UP = agafaParametres(cercaUP.findall(instruc)[0]+'\n')
	AC = agafaParametres(cercaAC.findall(instruc)[0]+'\n')
	PS = agafaParametres(cercaPS.findall(instruc)[0]+'\n')
	PP = agafaParametres(cercaPP.findall(instruc)[0]+'\n')
	IS = agafaParametres(cercaIS.findall(instruc)[0]+'\n')
	IP = agafaParametres(cercaIP.findall(instruc)[0]+'\n')
	FS = agafaParametres(cercaFS.findall(instruc)[0]+'\n')
	FP = agafaParametres(cercaFP.findall(instruc)[0]+'\n')
	boci = cercaDS.findall(instruc)
	#print 'US', US
	#print 'boci', boci
	if len(boci) > 0 :
		#print 'boci', boci
		DS = agafaParametres(cercaDS.findall(instruc)[0]+'\n')
		DP = agafaParametres(cercaDP.findall(instruc)[0]+'\n')
		#print 'DS,DP', DS, DP
	else :
		DS , DP = '',''
	#print DS , DP
	return US, UP, AC, PS, PP, IS, IP, FS, FP
 
 
def carregaInstruccions()	:
	global instrucCambres, instrucOcupacioHabitatges, instrucEmpreses, instrucServeis, instrucComerc, instrucSanitari, instrucEscolesElemental
	global instrucCentresSecundaria, instrucAlumnesSecundaria, instrucSuperiorNoUni, instrucSuperiorUni, instrucFamilies
	global instrucTreballadors, instrucActius, instrucInactius, instrucHabitatgesTipus, instrucHabitatgesUs
	pagina = wikipedia.Page( wikipedia.getSite("ca","wikipedia"), u'Usuari:Jrgoma/PoblFrança/ca')
	instruccions = pagina.get()
	cercaFamilies = re.compile(u'=== Famílies ===[^ ]*?(?=\n==)')
	instrucFamilies = cercaFamilies.findall(instruccions)[0]
	cercaHabitatgesTipus = re.compile(u'=== Habitatges per tipus ===[^ ]*?(?=\n==)')
	instrucHabitatgesTipus = cercaHabitatgesTipus.findall(instruccions)[0]	
	cercaHabitatgesUs = re.compile(u'=== Habitatges per ús ===[^ ]*?(?=\n==)')
	instrucHabitatgesUs = cercaHabitatgesUs.findall(instruccions)[0]
	cercaCambres = re.compile(u'=== Cambres ===[^ ]*?(?=\n==)')
	instrucCambres = cercaCambres.findall(instruccions)[0]
	cercaOcupacioHabitatges = re.compile(u'=== Ocupació Habitatges ===[^ ]*?(?=\n==)')
	instrucOcupacioHabitatges = cercaOcupacioHabitatges.findall(instruccions)[0]
	cercaTreballadors = re.compile(u'=== Població en edat de treballar ===[^ ]*?(?=\n==)')
	instrucTreballadors = cercaTreballadors.findall(instruccions)[0]
	cercaActius = re.compile(u'=== Actius ===[^ ]*?(?=\n==)')
	instrucActius = cercaActius.findall(instruccions)[0]
	cercaInactius = re.compile(u'=== Inactius ===[^ ]*?(?=\n==)')
	instrucInactius = cercaInactius.findall(instruccions)[0]
	cercaEmpreses = re.compile(u'=== Establiments total ===[^ ]*?(?=\n==)')
	instrucEmpreses = cercaEmpreses.findall(instruccions)[0]
	cercaServeis = re.compile(u'=== Establiments serveis ===[^ ]*?(?=\n==)')
	instrucServeis = cercaServeis.findall(instruccions)[0]	
	cercaComerc = re.compile(u'=== Establiments comercials ===[^ ]*?(?=\n==)')
	instrucComerc = cercaComerc.findall(instruccions)[0]	
	cercaSanitari = re.compile(u'=== Equipaments sanitaris ===[^ ]*?(?=\n==)')
	instrucSanitari = cercaSanitari.findall(instruccions)[0]
	cercaEscolesElemental = re.compile(u'=== Escoles ensenyament elemental ===[^ ]*?(?=\n==)')
	instrucEscolesElemental = cercaEscolesElemental.findall(instruccions)[0]	
	cercaCentresSecundaria = re.compile(u'=== Centres secundària ===[^ ]*?(?=\n==)')
	instrucCentresSecundaria = cercaCentresSecundaria.findall(instruccions)[0]
	cercaAlumnesSecundaria = re.compile(u'=== Alumnes secundària ===[^ ]*?(?=\n==)')
	instrucAlumnesSecundaria = cercaAlumnesSecundaria.findall(instruccions)[0]
	cercaSuperiorNoUni = re.compile(u"=== Centres d'ensenyament superior no universitari ===[^ ]*?(?=\n==)")
	instrucSuperiorNoUni = cercaSuperiorNoUni.findall(instruccions)[0]
	cercaSuperiorUni = re.compile(u"=== Centres d'ensenyament superior universitari ===[^ ]*?(?=\n==)")
	instrucSuperiorUni = cercaSuperiorUni.findall(instruccions)[0]
 
#global instrucCambres, instrucOcupacioHabitatges, instrucEmpreses, instrucCentresSecundaria, instrucAlumnesSecundaria
global DS, DP, nom, deNom
 
DS, DP = '',''
 
inicial = '58077'
final = '58313'
 
carregaInstruccions()
dades = creadic()
 
 
 
#pagina = wikipedia.Page( wikipedia.getSite("ca","wikipedia"), u'Usuari:Jrgoma/Laboratori')
#contingut = pagina.get()
#cercainsee = re.compile('\{\{ *Insee *= *(\d*)')
#wikipedia.output(contingut)
#insee = cercainsee.findall(contingut)[0]
insee = inicial
while insee <= final :
	text, insee = articleSencer(inicial, True)
	pagina = wikipedia.Page( wikipedia.getSite("ca","wikipedia"), nom)
	if pagina.exists() : 
		paginafr = wikipedia.Page( wikipedia.getSite("fr","wikipedia"), nom)
		textfr = paginafr.get()
		cercaInterwiki = re.compile('\[\[ca:.*\]\]')
		if len(cercaInterwiki.findall(textfr)) != 0 :
			wikipedia.output(nom)
			print "ja existeix en català"
			continue #ja existeix en català
		#en català existeix però no és l'article de la població francesa, en català cal desambiguació
		print nom, nomDepartament
 
		if insee[0:2] == '97' :
			codiDep = insee[0:3]
		else :
			codiDep = insee[0:2]
		cercanom = re.compile('([^A-Z]*)([A-Z].*)')
		departament = cercanom.sub(r'\1[[\2]]',nomDepartament[codiDep])
		cercanom = re.compile('([^A-Z]*)([A-Z][^\]]*)')
		departament = cercanom.findall(departament)[0][1]
		pagina = wikipedia.Page( wikipedia.getSite("ca","wikipedia"), nom + " ("+departament+")")
		if pagina.exists() :
			wikipedia.output(nom)
			print "Ja existeix"
			continue
	#treure parèntesis del nom dins del cos de l'article
	pagina.put(text,u"Bot creant article a partir de dades estadístiques")
	#print nom
	#wikipedia.output(text)
	#input('?')
 
pagina = wikipedia.Page( wikipedia.getSite("ca","wikipedia"), "Plantilla:Insee")
pagines = pagina.getReferences()
for pagina in pagines :
	actual = pagina.get()
	plantilles = pagina.templatesWithParams()
	for plantilla in plantilles :
		if plantilla[0] != "Insee" : continue
		print plantilla
		insee = plantilla[1][0]
		seccio1 = plantilla[1][1]
		seccio2 = plantilla[1][2]
		print insee, seccio1,seccio2
		nom = dades[insee]["nom"]
		seguent = False
		text = ''
		text1 = ''
		if seccio1 <= '1' and seccio2 >= '1' : text1 = ifocaixa(insee,seguent)
		if len(text1) > 0 : text = text + '\n\n' + text1
		text1 = ''
		if seccio1 <= '2' and seccio2 >= '2' : text1, InseeReal = demografia(insee,seguent)
		if len(text1) > 0 : text = text + '\n\n' + text1
		text1 = ''
		if seccio1 <= '3' and seccio2 >= '3' : text1 = economia(insee,seguent)
		if len(text1) > 0 : text = text + '\n\n' + text1
		text1 = ''
		if seccio1 <= '4' and seccio2 >= '4' : text1 = sanitEscol(insee,seguent)
		if len(text1) > 0 : text = text + '\n\n' + text1
		text1 = ''
		if seccio1 <= '5' and seccio2 >= '5' : text1 = diana(dades,insee)
		if len(text1) > 0 : text = text + '\n\n' + text1
		text1 = ''
		if seccio1 <= '6' and seccio2 >= '6' : text1 = referencies(insee,nom)
		if len(text1) > 0 : text = text + '\n\n' + text1
		text1 = ''
		lloc = nom.find(' (')
		if lloc > -1 : text = text.replace(nom,nom[0:lloc])
		actual = actual.replace('{{Insee|' + insee + '|' + seccio1 + '|' + seccio2 + '}}',text)
	pagina.put(actual,u'Bot afegint seccions a partir de dades estadístiques')