[Portugal] Substituição de strings em simultâneo

Patrícia Pécurto patricia.pecurto gmail.com
Quinta-Feira, 14 de Maio de 2015 - 03:45:39 PDT


Bom dia,

Percebi que não posso fazer desta maneira por isso o que me sugeriu não vai
funcionar.

Neste momento tenho este código montado com algumas das suas sugestões
anteriores que corre para a sequência de 1 a 31 substituindo o valor 3:

import re
# Substituir o nº "_3" pelos nºs "_1"," _2", "_3"... até "_31" inclusive.
for number in xrange(1,31+1):
    str1=re.sub(r'(_3)',"_%s" % number,"D:\PATRICIA\DOCUMENTOS\ESTACOES
METEOROLOGICAS\DADOS METEOROLOGICOS\HR\H_1999_1_3.xlsx")
    str2=re.sub(r'(_3)',"_%s" %
number,"D:\PATRICIA\IG\QGIS\FWI\HR\ESTACOES_HR_1999_1_3")
    str3=re.sub(r'(_3)',"_%s" %
number,"D:\PATRICIA\IG\QGIS\FWI\HR\ESTACOES_HR_1999_1_3.shp")
    str4=re.sub(r'(_3)',"_%s" %
number,"D:\PATRICIA\IG\QGIS\FWI\HR\ESTACOES_HR_1999_1_3_SF_Int.shp")
    str5=re.sub(r'(_3)',"_%s" %
number,"D:\PATRICIA\IG\QGIS\FWI\HR\ESTACOES_HR_1999_1_3_SF.shp")
    str6=re.sub(r'(_3)',"_%s" %
number,"D:\PATRICIA\IG\QGIS\FWI\HR\Python_HR_Viz8_Cell100_3")

    #Join atribute table : "DIST_COSTA_etrs89.shp" com "H_1999_1_3.xlsx"
    processing.runalg("qgis:joinattributestable",
"D:\PATRICIA\IG\QGIS\DIST_COSTA_etrs89.shp", str1, "EST", "num", str2)
    # Selecte by atribute: Seleciona o campo H != de NULL e -99999
    processing.runalg("qgis:selectbyattribute", str3, "H", 1, "NULL", str3)
    # Save selected features: cria nova shape sem NULL.
    processing.runalg("qgis:saveselectedfeatures", str3, str4)
    #Selecionar desta vez no campo "H" os valores diferentes de -999.9
    processing.runalg("qgis:selectbyattribute", str4, "H", 1, "-999.9",
str4)
    # Save selected features: cria nova shape sem falhas final
    processing.runalg("qgis:saveselectedfeatures", str4, str5)
    # Aplicar a função inverse distance weighed com 8 vizinhos e Cellsize
100
    processing.runalg("saga:inversedistanceweighted", str5, "H", 0, 2, 0,
1, 100, 0, 0, 8, "-152444.0, 180000.0, -302911.0, 280000.0", 100, str6)

Acontece que eu quero que o código inicie a correr num ficheiro em .xlsx já
criado (H_1999_1_1.xlsx) e que corra utilizando os ficheiros seguintes tb
já criados numa ordem sequencial como expliquei no e-mail anterior, em que
variam os números a:

Vermelho=1999 a 2014
Azul=1 a 12
Verde=1 a 31

ex:
H_1999_1_1.xlsx
H_1999_1_2.xlsx
...
H_1999_1_31.xlsx
H_1999_2_1.xlsx
...
H_1999_2_31.xlsx
...
...
H_1999_12_31.xlsx
H_2000_1_1.xlsx
...
...
H_2000_12_31.xlsx
...
...
...
H_2014_12_31.xlsx

Como devo fazer?
Alguém tem ideia?

Obrigada,

Patrícia.


2015-05-13 22:20 GMT+01:00 Mendes de Jesus, Jorge <
jorge.mendesdejesus  wur.nl>:

> Boa noite
>
>
> Basta recorrer ao itertools
>
>
> 0) import itertools
>
>
> 1) Fazendo  o X,Y,Z como iterators
>
>
> iterX=xrange(1999,2014+1)
> iterY=xrange(1,12+1)
> iterZ=xrange(1,31+1)
>
>
>
> 2) Depois fazendo o producto entre dois iterators obtem a combinacao
> desejada e.g
>
> for item in itertools.product(iterY,iterZ):
>     print item
>
> isto vai dar (1,1).....(12,31)
>
> 3) O iterator do ponto 2 usado em conjunto com o  iterator X vai dar um
> objecto tipo (1999,(1,1))
> ?
> for item in  itertools.product(iterX,iterYZ):
>     #item[0] --> X
>     #item[1][0] --> Y
>     #item[1][1] -- >Z
>     print "D:\PATRICIA\DOCUMENTOS\ESTACOES METEOROLOGICAS\DADOS
> METEOROLOGICOS\HR\H_%s_%s_%s.xlsx" %(item[0],item[1][0],item[1][1])
>
>
> 4) Agora tudo ao molho e fe em deus !!!!
>
> import itertools
> iterX=xrange(1999,2014+1)
> iterY=xrange(1,12+1)
> iterZ=xrange(1,31+1)
>
> iterYZ=itertools.product(xrange(1,12+1),xrange(1,31+1))
> for item in  itertools.product(iterX,iterYZ):
>
>     #item[0] --> X
>     #item[1][0] --> Y
>     #item[1][1] -- >Z
>     str1="D:\PATRICIA\DOCUMENTOS\ESTACOES METEOROLOGICAS\DADOS
> METEOROLOGICOS\HR\H_%s_%s_%s.xlsx" %(item[0],item[1][0],item[1][1])
>     str2="D:\PATRICIA\IG\QGIS\FWI\HR\ESTACOES_HR_%s_%s_%s"
> #itertools.product
>     processing.runalg("qgis:joinattributestable",
> "D:\PATRICIA\IG\QGIS\DIST_COSTA_etrs89.shp", str1, "EST", "num", str2)
>
>
> Nao gosto muito do item[0], item[1][0], item[1][1], alem tem outro
> sugestao ???
>
> Jorge de Jesus
>
>
>
>
>
>
>
>
>
> ________________________________
> From: portugal-bounces  lists.osgeo.org <portugal-bounces  lists.osgeo.org>
> on behalf of Patrícia Pécurto <patricia.pecurto  gmail.com>
> Sent: 13 May 2015 22:30
> To: OSGeo PT - The OSGeo Portugal Local Chapter
> Subject: [Portugal] Substituição de strings em simultâneo
>
> Boa tarde,
>
> Estou a escrever um código que tem de correr para um número elevado de
> intervalos de números em simultâneo.
> O código é o seguinte:
>
> processing.runalg("qgis:joinattributestable",
> "D:\PATRICIA\IG\QGIS\DIST_COSTA_etrs89.shp",
> "D:\PATRICIA\DOCUMENTOS\ESTACOES METEOROLOGICAS\DADOS
> METEOROLOGICOS\HR\H_X_Y_Z.xlsx", "EST", "num",
> "D:\PATRICIA\IG\QGIS\FWI\HR\ESTACOES_HR_X_Y_Z")
>
> Sabendo que as letras X, Y e Z têm que variar entre os seguintes
> intervalos de números:
>
> X= 1999, 2000, ..., 2014
> Y= 1,2, ..., 12
> Z= 1, 2, ..., 31
>
> Como posso substituir as letras (X, Y e Z) deste código simultaneamente
> obtendo as  seguintes combinações de sequências:
>
> (X        Y  Z)
> 1999  1   1
> 1999  1   2
> ...
> 1999  1   31
> 1999  2   1
> 1999  2   2
> ...
> 1999  2   31
> 1999  3   1
> 1999  3   2
> ...
> ...
> ...
> 1999  12  31
> ...
> ...
> 2000  1    1
> ...
> ...
> 2000  12   31
> ...
> ...
> ...
> 2014  12  31
>
> Alguém me pode ajudar?
>
> Obrigada,
>
> Patrícia.
> _______________________________________________
> Portugal mailing list
> Portugal  lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/portugal
>
-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.osgeo.org/pipermail/portugal/attachments/20150514/45722096/attachment.html>


Mais informações acerca da lista Portugal