[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Ajuda com script



Fabio,

No script anterior tinha um problema de identação. Fiz uma revisão e ficou da seguinte forma :

####
# Inicio script python
###
# -*- coding: iso-8859-1 -*-
"""
   script.py [1.0 - 20070223] : Copia arquivos de um dir para outro
   Uso  :
        script.py [arq_origem] [arq_destino]
   Onde :
        arq_origem  : Nome do arquivo com a lista de caminhos completos
                      de cada arquivo a ser copiado
        arq_destino : Nome do arquivo com a lista de caminhos completos
                      do destino de cada arquivo

   Obs :
        Formato esperado para o arq_origem e arq_destino :
            /dir/sub_dir_1/sub_dir_2/.../nome_arq
        Exemplo :
           /home/dd/endo/5_cpre/papilotomia/14.jpg
       
"""
import os
import getopt
import sys


def extrai(lista_linha):
    """
     Obtém um dicionário com o caminho dos arquivo.
    """
    dic_path = {}
    for completo in lista_linha:
        nome_file = completo.split("/")[-1].strip()
        lista_nome_path = completo.split("/")[:-1]
        dic_path[nome_file] = lista_nome_path
        #print "dic_path[%s] = %s" % (nome_file, dic_path[nome_file])
    return dic_path

def copia_arq(lista_path, lista_path_dst, arq):
    """
       Copia o arquivo arq de lista_path ( path de origem) para o lista_path_dst ( path destino)
    """
    caminho = "/"
    # Testa  path e cria o diretório , se necessário
    for i in lista_path_dst:
        caminho = caminho + "/" + i
        if not(os.path.exists (caminho)):
            os.popen("mkdir '%s'" % caminho)
    from_path = "/" + ("/").join(lista_path) + "/" + arq
    to_path = "/" + ("/").join(lista_path_dst) + "/" + arq
  
    os.popen("cp '%s' '%s'" % (from_path, to_path))
    print "arquivo %s copiado" % arq


def main():
    """
        Funcao Principal
    """
    try:
        opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
    except getopt.error, msg:
        print msg
        print "Para ajuda use --help ou -h"
        sys.exit(2)
    for o, a in opts:
        if o in ("-h", "--help"):
            print __doc__
            sys.exit(0)
    # Se não receber exatamente 2 argumentos ...
    if len(args) <> 2:
        print __doc__
        sys.exit(0)
  
    arq1 = open(args[0], "r")
    arq2 = open(args[1], "r")

    lista_arq1 = arq1.readlines()
    lista_arq2 = arq2.readlines()

    arq1.close()
    arq2.close()

    dic_path_from = {}
    dic_path_to = {}

    dic_path_from = extrai(lista_arq1).copy()
    dic_path_to = extrai(lista_arq2).copy()

    for arquivo in dic_path_from.keys():
        copia_arq(dic_path_from[arquivo],dic_path_to[arquivo], arquivo)


if __name__ == "__main__":
    main()

   
   
####
# Fim Script python
####

Abraços,
Luiz Guilherme

On 2/22/07, Fabio Guerrazzi <debian@fg.med.br> wrote:

> Luiz Guilherme Aldabalde wrote:
> Fabio,
>
> Eui gosto muito do Python, e fiz o seguinte script  para a sua situação:
> ####
> # Inicio script python
> ###
> import os
>
> def extrai(lista_linha):
>    """
>     Obtém um dicionário com o caminho dos arquivo.
>    """
>     dic_path = {}
>     for completo in lista_linha:
>         nome_file = completo.split("/")[-1].strip()
>         lista_nome_path = completo.split("/")[:-1]
>         dic_path[nome_file] = lista_nome_path
>         #print "dic_path[%s] = %s" % (nome_file, dic_path[nome_file])
>     return dic_path
>
> def copia_arq(lista_path, lista_path_dst, arq):
>     """
>        Copia o arquivo arq de lista_path ( path de origem) para o
> lista_path_dst ( path destino)
>     """
>     caminho = "/"
>     # Testa  path e cria o diretório , se necessário
>     for i in lista_path_dst:
>         caminho = caminho + "/" + i
>         if not(os.path.exists(caminho)):
>             os.popen("mkdir '%s'" % caminho)
>     from_path = "/" + ("/").join(lista_path) + "/" + arq
>     to_path = "/" + ("/").join(lista_path_dst) + "/" + arq
>
>     os.popen("cp '%s' '%s'" % (from_path, to_path))
>     print "arquivo %s copiado" % arq
>
>
> arq1 = open("arq1.txt", "r")
> arq2 = open("arq2.txt", "r")
>
> lista_arq1 = arq1.readlines()
> lista_arq2 = arq2.readlines()
>
> arq1.close()
> arq2.close()
>
> dic_path_from = {}
> dic_path_to = {}
>
> dic_path_from = extrai(lista_arq1).copy()
> dic_path_to = extrai(lista_arq2).copy()
>
> for arquivo in dic_path_from.keys():
>     copia_arq(dic_path_from[arquivo],dic_path_to[arquivo], arquivo)
>
> ####
> # Fim Script python
> ####
>
> Observe que eu nâo coloquei nenhum tratamento de erro, por isso os
> arquivos
> de origem devem existir e você deverá rodar estre script como usuário que
> tenha pemrissão de escrita no path de destino.
>
> Espero ter lhe ajudado.
>
> Abraços,
> Luiz Guilherme
>
> On 2/22/07, Fabio Guerrazzi < debian@fg.med.br> wrote:
>>
>> Pessoal,
>>
>> Tenho dois arquivos com a seguinte estrutura:
>>
>> Arquivo 1:
>> /home/dd/endo/1_esofago/Barrett/Barrett longo-861890-0_04.bmp
>> /home/dd/endo/5_cpre/papilotomia/14.jpg
>> /home/dd/endo/2_estomago/variz gastrica sgto em jato/43.JPG
>> etc...
>>
>> Arquivo 2:
>> /home/dd/admin/imagens/1_esofago/Barrett/Barrett longo-861890-0_04.bmp
>> /home/dd/admin/imagens/5_cpre/papilotomia/14.jpg
>> /home/dd/admin/imagens/2_estomago/variz gastrica sgto em jato/43.JPG
>> etc...
>>
>> Eu preciso mover todos os arquivos listados em 1 para o endereço
>> especificado em 2.
>> Nem todos os diretórios destino existem, e como se pode ver, alguns
>> nomes
>> contém espaços ou maiúsculas.
>>
>> Eu consegui gerar os arquivos, porém não tenho idéia de como contruir o
>> script.


Ajudou sim. Entretanto ou eu não estou sabendo usar, ou há algum erro no
script. Veja:

$ python script.py arquivo_origem.txt arquivo-destino.txt

sys:1: DeprecationWarning: Non-ASCII character '\xc3' in file script.py on
line 9, but no encoding declared; see
http://www.python.org/peps/pep-0263.html for details
  File "script.py", line 10
    dic_path = {}
    ^
SyntaxError: invalid syntax


--
Fabio.


--
To UNSUBSCRIBE, email to debian-user-portuguese-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org



Reply to: