compactar com rar no python

97 views
Skip to first unread message

Marcelo Augusto

unread,
Jun 8, 2016, 2:55:06 PM6/8/16
to Python Brasil
Amigos, saudações

tenho um sistema onde compacto as pastas todos os dias, porem o arquivo esta enorme 2,7GB.
quando envio pra nuvem demora muito por causa do tamanho.

Então resolvi fazer uma rotina em python para zipar pasta por pasta, pois nos parametros do rar nao da pra fazer.
até ai tudo bem.

consegui montar uma lista das pastas com a funcao os.walk.
a minha ideia era passar cada item da lista em um laço for e zipar cada uma.

porem da o erro:

Traceback (most recent call last):
  File "C:/PRG/PYQT/livro/estudo/zipaprg.py", line 9, in <module>
    system('rar a %s \ex\%s' ,i)
TypeError: system() takes exactly 1 argument (2 given)
 

sera que os srs. poderiam me ajudar por favor?

se conseguir fazer o outro questionamento que tenho é:

sera que vai dar algum erro de memoria? visto que são muitas pastas e a cada interação no laço for o rar sera chamado.

obrigado a todos


segue o codigo:

from os import *

print("*"*50)

arquivo
=list(walk('/pasta'))
lista
=arquivo[0][1]

for i in lista:
    system
('rar a %s \ex\%s' ,i)


Victor Augusto Furtado Leite

unread,
Jun 8, 2016, 3:49:18 PM6/8/16
to python...@googlegroups.com
Marcelo, é que o system aceita apenas um parâmetro, que é a linha de comando que você quer executar. Ou seja, no seu exemplo você teria que ter algo assim:

system('rar a %s \ex\%s' % i)

Dei uma olhada rápida no help do rar e acho que a sintaxe precisa ser alterada um pouco também. Ele espera isso:

rar a arquivo.rar [pastas ou arquivos a serem adicionados ao arquivo.rar]

Então você vai precisar de mudar pra algo parecido com isso:

system('rar a %s \ex\%s' % ('nome do arquivo rar', i))

Do jeito que você está usando não vão haver várias instâncias do rar rodando ao mesmo tempo, o system espera o comando retornar.


[]s



--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Victor

Diego Rocha

unread,
Jun 8, 2016, 5:43:06 PM6/8/16
to python...@googlegroups.com
Essa lib aqui deve resolver https://rarfile.readthedocs.io/en/latest/

Atenciosamente,
Diego Rocha
Atenciosamente,
Diego Rocha

Marcelo Augusto

unread,
Jun 8, 2016, 6:46:06 PM6/8/16
to python...@googlegroups.com
Vitor Muito obrigado pela ajuda.
na verdade meu comando rar é mais complexo atualmente faço assim:

rar u -r -ibck -m3 -logf="c:\bk\LOGS\MEUPC_LOGS\MEUPC.txt" c:\bk\ZIPADOS\MEUPC001\MEUPC009 @C:\BK\MEUPC\MEUPC009.lst

o backup é incremental e pega uma lista pre-definida.

com essa rotina em python pretendo abandonar a lista e zipar pasta por pasta para quebrar o tamanho de 2 gigas e pouco em tamanhos menores.


agradeço porque foi esclarecedor, realmente estava errado o modo como os parâmetros são passados.
obrigado por esclarecer que system espera encerrar uma instancia para começar a outra.
vou quebrando a cabeça aqui pra ver se da certo.

abraços

marcelo


Você recebeu essa mensagem porque está inscrito em um tópico no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/python-brasil/uHnuubSZfBw/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para python-brasi...@googlegroups.com.

Marcelo Augusto

unread,
Jun 8, 2016, 6:47:54 PM6/8/16
to python...@googlegroups.com
OK, Diego muito obrigado pela ajuda,
nem sabia que existia essa lib.
vou testar essa opção também

abraços

marcelo

Você recebeu essa mensagem porque está inscrito em um tópico no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/python-brasil/uHnuubSZfBw/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para python-brasi...@googlegroups.com.

Marcelo Augusto

unread,
Jun 8, 2016, 7:48:48 PM6/8/16
to Python Brasil
Vitor Muito obrigado pela ajuda.
na verdade meu comando rar é mais complexo atualmente faço assim:

rar u -r -ibck -m3 -logf="c:\bk\LOGS\MEUPC_LOGS\MEUPC.txt" c:\bk\ZIPADOS\MEUPC001\MEUPC009 @C:\BK\MEUPC\MEUPC009.lst

o backup é incremental e pega uma lista pre-definida.

com essa rotina em python pretendo abandonar a lista e zipar pasta por pasta para quebrar o tamanho de 2 gigas e pouco em tamanhos menores.


agradeço porque foi esclarecedor, realmente estava errado o modo como os parâmetros são passados.
obrigado por esclarecer que system espera encerrar uma instancia para começar a outra.
vou quebrando a cabeça aqui pra ver se da certo.

abraços

Marcelo Augusto

unread,
Jun 8, 2016, 7:49:00 PM6/8/16
to Python Brasil

Marcelo Augusto

unread,
Jun 8, 2016, 7:53:23 PM6/8/16
to Python Brasil
Vitor, Diego e demais colegas do grupo.
 
obrigado pela ajuda mais uma vez

Consegui fazer a rotina funcionar, porem o rar nao esta compactando pastas com nome contendo espaços(ex: nova pasta).
fora isso esta funcionando perfeitamente. o os.walk entra na pasta e vai compactando uma a uma individualmete, porem com essa limitação de pastas com nomes contendo espaço, ache que é algum parametro do RAR, vou tentar descobrir.  segue o codigo, usem se for necessario.

abraços, marcelo 

from os import *

print("*"*50)


arquivo
=list(walk('/teste'))

lista
=arquivo[0][1]

for i in lista:

    system
("rar u -r -ibck -m3 c:\\teste2\\%s \\teste\%s" %(i,i))


Marcelo Augusto

unread,
Jun 8, 2016, 8:22:11 PM6/8/16
to python...@googlegroups.com
Vitor saudações, postei que deu certo nao sei se voce viu.
porem ocorre que pastas com nomes com espaço nao estou conseguindo compactar.
na normalidade no rar faria assim:

rar a "nova pasta"   c:\teste\*.*

o rar criaria o arquivo chamado nova pasta.rar, porque coloquei o nome entre aspas.

então conclui que tenho que passar isso no python através do system() porem não estou conseguindo.
falta só isso para rotina funcionar perfeitamente.

abraços

marcelo





Você recebeu essa mensagem porque está inscrito em um tópico no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/python-brasil/uHnuubSZfBw/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para python-brasi...@googlegroups.com.

Victor Augusto Furtado Leite

unread,
Jun 8, 2016, 8:31:39 PM6/8/16
to python...@googlegroups.com
Fala Marcelo, que bom que resolveu...

Você pode resolver isso assim:
system("rar u -r -ibck -m3 c:\\teste2\\\"%s\" \\teste\%s" %(i,i))
ou assim:
system('rar u -r -ibck -m3 c:\\teste2\\"%s" \\teste\%s' %(i,i))

Marcelo Augusto

unread,
Jun 8, 2016, 9:32:12 PM6/8/16
to python...@googlegroups.com
Victor você deu a luz no caminho ai cara, muitíssimo obrigado

testei mas não deu certo mas a sua logica me ajudou a achegar lá.

funcionou assim:

system("rar u -r -ibck -m3 c:\\teste2\\\"%s\" c:\\teste\\\"%s\"\\*.*" % (i, i)) 

Deus te abençoe

Marcelo Augusto

unread,
Jun 8, 2016, 9:33:42 PM6/8/16
to Python Brasil
Ao Vitor e Diego e demais colegas do grupo

muito obrigado

resolvi o problema

marcelo 
Reply all
Reply to author
Forward
0 new messages