encontrar e copiar todos arquivos no sistema [RESOLVIDO]

1. encontrar e copiar todos arquivos no sistema [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 06/08/2017 - 09:19h

Bom dia

Estou com o seguinte código:

import os, sys
import time
from time import sleep
import shutil

# função para encontrar os arquivos

def find_files():

for source, directories, files in os.walk('.'):

print source
print directories
print files

sleep(2.5)

# função da cópia dos arquivos encontrados
# necessita copiar todos os arquivos encontrados na função find_files()

def copy_files():

source_files = os.listdir('.')
for file_name in source_files:
full_file_name = os.path.join('.', file_name) # mudar isso para checar por todas extensões possíveis
# if file.endswith('.log')
if (os.path.isfile(full_file_name)):
shutil.copy(full_file_name, '/home')

find_files()
copy_files()


a função para encontrar os arquivos funciona tranquilamente, mas a de copiar copia apenas alguns arquivos...

penso eu que devo aprimorar usando glob, ou os.walk para fazer a cópia

alguém para me dar uma luz?

Agradeço



  


2. Re: encontrar e copiar todos arquivos no sistema [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 06/08/2017 - 14:47h

UP


3. Re: encontrar e copiar todos arquivos no sistema

Fernando
phoemur

(usa Debian)

Enviado em 06/08/2017 - 20:13h

Amigo, sua primeira função está imprimindo e não retornando os arquivos.
Já a sua função de copiar só está copiando do diretório atual (os.listdir) e não dos subdiretórios.
De qualquer forma, shutil.copytree() não resolveria seu problema?

Ou então, vou fazer aqui usando os.scandir() (só tem no python 3.x)
os.scandir() é uma melhoria grande comparado a os.walk(), tanto em performance quanto em usabilidade.
Se você está aprendendo python agora sugiro aprender python3 direto pois tem muita coisa legal...


#!/usr/bin/env python3

import os
import shutil

def filetree(path):
for e in os.scandir(path):
if e.is_file():
yield e.path
else:
yield from filetree(e.path)

for file in filetree('.'):
shutil.copy(file, '/home')




4. Re: encontrar e copiar todos arquivos no sistema [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 06/08/2017 - 21:28h

phoemur escreveu:

Amigo, sua primeira função está imprimindo e não retornando os arquivos.
Já a sua função de copiar só está copiando do diretório atual (os.listdir) e não dos subdiretórios.
De qualquer forma, shutil.copytree() não resolveria seu problema?

Ou então, vou fazer aqui usando os.scandir() (só tem no python 3.x)
os.scandir() é uma melhoria grande comparado a os.walk(), tanto em performance quanto em usabilidade.
Se você está aprendendo python agora sugiro aprender python3 direto pois tem muita coisa legal...


#!/usr/bin/env python3

import os
import shutil

def filetree(path):
for e in os.scandir(path):
if e.is_file():
yield e.path
else:
yield from filetree(e.path)

for file in filetree('.'):
shutil.copy(file, '/home')



Amigo, ta dando erro nesse código seu

AttributeError: 'module' object has no attribute 'scandir'

estou usando o python3...



5. Re: encontrar e copiar todos arquivos no sistema

Fernando
phoemur

(usa Debian)

Enviado em 06/08/2017 - 22:00h

Python 3.5
Veja: https://www.python.org/dev/peps/pep-0471/


Abstract

This PEP proposes including a new directory iteration function, os.scandir() , in the standard library. This new function adds useful functionality and increases the speed of os.walk() by 2-20 times (depending on the platform and file system) by avoiding calls to os.stat() in most cases.


Não quis fazer com os.walk para não dar a resposta pronta, mas dá também e é bem parecido...
O seu código de erro significa que sua versão do python ainda não tem os.scandir

Outra coisa de python3 que não dá certo no python2 no meu código seria o yield from que apareceu no python 3.3
veja:
https://www.python.org/dev/peps/pep-0380/


6. Re: encontrar e copiar todos arquivos no sistema [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 06/08/2017 - 22:24h

phoemur escreveu:

Python 3.5
Veja: https://www.python.org/dev/peps/pep-0471/


Abstract

This PEP proposes including a new directory iteration function, os.scandir() , in the standard library. This new function adds useful functionality and increases the speed of os.walk() by 2-20 times (depending on the platform and file system) by avoiding calls to os.stat() in most cases.


Não quis fazer com os.walk para não dar a resposta pronta, mas dá também e é bem parecido...
O seu código de erro significa que sua versão do python ainda não tem os.scandir

Outra coisa de python3 que não dá certo no python2 no meu código seria o yield from que apareceu no python 3.3
veja:
https://www.python.org/dev/peps/pep-0380/


estou usando a versão 3.5 do python, e ainda assim retorna o erro, no yeld from, como sintaxe inválida

se puder ajudar, agradeço





7. Re: encontrar e copiar todos arquivos no sistema

Fernando
phoemur

(usa Debian)

Enviado em 06/08/2017 - 22:40h


#!/usr/bin/env python

import os
import shutil

def filetree(path):
for dirpath, dirnames, filenames in os.walk("."):
for f in filenames:
yield os.path.join(dirpath, f)

for file in filetree('.'):
shutil.copy(file, '/home')

Essa é a forma antiga de se fazer a mesma coisa


8. Re: encontrar e copiar todos arquivos no sistema [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 07/08/2017 - 03:54h

phoemur escreveu:


#!/usr/bin/env python

import os
import shutil

def filetree(path):
for dirpath, dirnames, filenames in os.walk("."):
for f in filenames:
yield os.path.join(dirpath, f)

for file in filetree('.'):
shutil.copy(file, '/home')

Essa é a forma antiga de se fazer a mesma coisa


bom, não deu certo dessas formas, infelizmente
mas já corrigi, e está funcionando perfeitamente! :)
obrigado



9. RESOLVIDO.





Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts