Pesquisa de extensões por através do Python [RESOLVIDO]

1. Pesquisa de extensões por através do Python [RESOLVIDO]

Guilherme Henrique
Rain

(usa Outra)

Enviado em 23/09/2018 - 17:17h

Boa tarde. Estou tentando escrever um código em Python pra achar uns arquivos perdidos no C:/. Podem me ajudar? Estou usando o glob para pegar todas as extensões mas ele só pesquisa dentro da própria pasta. Como seria esse código para que ele percorresse o disco inteiro?

import os
import glob

ext=['*.txt','*.lnk','*.application','*.veg','*.doc','*.pdf','*.jpg','*.gif','*.png','*.bitmap'
,'*.mp4','*.avi','*.zip','*.wav','*.svg','*.mdb','*.rar','*.tar','*.xf','*.gz'
,'*.sqlite3','*.mov','*.pptx','*.pptm','*.xlsx','*.xlsm','*.aes','*.accdb','*.bmp'
,'*.mpeg','*.sql','*.sqlitedb','*.jar','*.java','*.cdr','*.vssettings','*.vbs','*.vssx'
,'*.cpp','*.c','*.NET','*.rb','*.sh','*.appref-ms','*.html','*.css','*.sublime-package'
,'*.bz2','*.iso','*.img','*.sfk','*.mkv','*.xz','*.exe']

for i in ext:
files = glob.glob(i)
for file in files:
os.remove(file)


  


2. MELHOR RESPOSTA

Fernando
phoemur

(usa Debian)

Enviado em 25/09/2018 - 22:16h

Conforme eu te falei no outro tópico https://www.vivaolinux.com.br/topico/Python/Selecao-de-arquivos-em-Python
Python acima de 3.5 use os.scandir
abaixo de 3.5 use os.walk

usando os.scandir:
#!/bin/env python3

import os
import sys


''' Extensoes a serem procuradas '''
EXT = ['.txt','.lnk','.application','.veg','.doc','.pdf','.jpg','.gif','.png','.bitmap',
'.mp4','.avi','.zip','.wav','.svg','.mdb','.rar','.tar','.xf','.gz',
'.sqlite3','.mov','.pptx','.pptm','.xlsx','.xlsm','.aes','.accdb','.bmp',
'.mpeg','.sql','.sqlitedb','.jar','.java','.cdr','.vssettings','.vbs','.vssx',
'.cpp','.c','.NET','.rb','.sh','.appref-ms','.html','.css','.sublime-package',
'.bz2','.iso','.img','.sfk','.mkv','.xz','.exe']

def scantree(path):
for entry in os.scandir(path):
try:
if entry.is_dir(follow_symlinks=False):
yield from scantree(entry.path)
else:
filename, extension = os.path.splitext(entry.name.lower())

if extension in EXT:
yield entry

except PermissionError as e: # Não conseguiu entrar no diretorio por falta de permissao
print(str(e))

if __name__ == "__main__":
PY3K = sys.version_info >= (3, 5)

if not PY3K:
raise SystemError("Só funciona com Python >= 3.5")

for entry in scantree(sys.argv[1] if len(sys.argv) > 1 else '.'):
print(os.path.abspath(entry.path))
# os.remove(os.path.abspath(entry.path)) se quiser apagar todos os arquivos descomente esta linha


Usando os.walk (Python < 3.5)
#!/bin/env python

import os
import sys


''' Extensoes a serem procuradas '''
EXT = ['.txt','.lnk','.application','.veg','.doc','.pdf','.jpg','.gif','.png','.bitmap',
'.mp4','.avi','.zip','.wav','.svg','.mdb','.rar','.tar','.xf','.gz',
'.sqlite3','.mov','.pptx','.pptm','.xlsx','.xlsm','.aes','.accdb','.bmp',
'.mpeg','.sql','.sqlitedb','.jar','.java','.cdr','.vssettings','.vbs','.vssx',
'.cpp','.c','.NET','.rb','.sh','.appref-ms','.html','.css','.sublime-package',
'.bz2','.iso','.img','.sfk','.mkv','.xz','.exe']

def scantree(path):
for root, dirs, files in os.walk(path):
dirs = [dir for dir in dirs if not dir.startswith(".")]

for name in files:
if name.startswith("."):
continue

fullname = os.path.join(root, name)

if fullname.startswith("./"):
fullname = fullname[2:]

filename, extension = os.path.splitext(fullname.lower())

if extension in EXT:
yield fullname

if __name__ == "__main__":

for entry in scantree(sys.argv[1] if len(sys.argv) > 1 else '.'):
print(os.path.abspath(entry))
# os.remove(os.path.abspath(entry)) se quiser apagar todos os arquivos descomente esta linha

______________________
https://github.com/phoemur

3. Re: Pesquisa de extensões por através do Python [RESOLVIDO]

Hugo Torres
F9KILL

(usa Debian)

Enviado em 24/09/2018 - 16:28h

Olha este link talvez ajude:
https://forum.imasters.com.br/topic/477697-bucando-arquivos-em-pastas/


4. Re: Pesquisa de extensões por através do Python [RESOLVIDO]

Guilherme Henrique
Rain

(usa Outra)

Enviado em 26/09/2018 - 08:17h

Resolvi usando o glob.

for i in ext:
files = glob.iglob(f'/home/**/'+(i), recursive=True)
for file in files:
os.remove(file)

O resultado é o mesmo, não?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts