Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os, sys
- import subprocess
- import shutil
- import re
- from PyPDF2 import PdfFileReader
- from docx import *
- from django.utils.encoding import smart_text
- import xlrd
- from pdfminer import *
- import textract
- import pandas as pd
- from pptx import Presentation
- from tika import parser
- # -----------------------------------------------------------------------------------------------------------------------------
- # --------------------------------------------------------INPUTS---------------------------------------------------------------
- print("\n\t\tDivisao de arquivos por conteudo\n")
- caminhoinput = raw_input("\nEntre com o caminho da pasta principal onde deseja buscar buscar: \nex: '\pasta\exemplo'\nobs: nao de espacos\n")
- local = raw_input("\nEntre com o caminho da pasta onde os arquivos serao movidos: \nex: '\pasta\exemplo'\nobs:nao de espacos\n")
- search = raw_input("\nEntre com a(s) palavra(s) que deseja buscar: \nobs(no caso de mais de uma palavra separe-as com virgulas, nao use espacos)\n")
- searches = re.split('[,]', search)
- encontra = str(local) + "\_" +"busca_encontrada"
- naoencontra = str(local) + "\_" + "busca_nao_encontrada"
- naorelacionados = str(local) + "\_" + "nao_relacionados_c_a_busca"
- # -----------------------------------------------------------------------------------------------------------------------------
- # -----------------------------------------Visual-------------------------------------------------------------------------------
- print("\n\t\tEstamos buscando por:\n")
- for search in searches:
- print(search)
- print("\n\t\tRealizando busca\n")
- # -----------------------------------------------------------------------------------------------------------------------------
- # ----------------------------------------Funcoes para cada tipo de arquivo-----------------------------------------------------
- def pdf_doc_txt(src, searches):
- Text = textract.process(src, encoding="utf-8").decode("utf-8").lower()
- for search in searches:
- if search.lower() in Text:
- dst = os.path.join(encontra)
- status = "foi encontrado a busca " + search
- break
- else:
- dst = os.path.join(naoencontra)
- status = "nao foi encontrado"
- return [dst, status];
- def nao_relacionados(src, searches):
- for search in searches:
- if re.search(search, str(file)):
- dst = os.path.join(encontra)
- status = "foi encontrado " + search
- break
- else:
- dst = os.path.join(naorelacionados)
- status = "nao relacionado"
- return [dst, status];
- def excel(src, searches):
- wb = pd.read_excel(src, skip_blank_lines=True, encoding_override="utf-8")
- wb.dropna(how="all", inplace=True)
- for search in searches:
- for index, row in wb.head().iterrows():
- if search.lower() in repr(row).lower():
- dst = os.path.join(encontra)
- status = "foi encontrado " + search
- break
- else:
- dst = os.path.join(naoencontra)
- status = "nao foi encontrado"
- return[dst, status]
- def slides_ppt(src, searches):
- text_runs = []
- f = open(src, "rb")
- prs = Presentation(f)
- for slide in prs.slides:
- for shape in slide.shapes:
- if not shape.has_text_frame:
- continue
- for paragraph in shape.text_frame.paragraphs:
- for run in paragraph.runs:
- text_runs.append(run.text)
- f.close()
- for search in searches:
- if search.lower() in str(text_runs).lower():
- dst = os.path.join(encontra)
- status = "foi encontrado " + search
- break
- else:
- dst = os.path.join(naoencontra)
- status = "nao foi encontrado"
- return [dst, status]
- def pptsemx(src, searches):
- parsed = parser.from_file(src)
- print(src)
- for search in searches:
- if search.lower() in parsed["content"].lower():
- dst = os.path.join(encontra)
- status = "foi encontrado " + search
- break
- else:
- dst = os.path.join(naoencontra)
- status = "nao foi encontrado"
- return [dst, status]
- def docsemx(src, searches):
- try:
- new_file_path = src.split(".")
- print(new_file_path)
- print("ponto", new_file_path[-1])
- del new_file_path[-1]
- new_file_path = ''.join(new_file_path) + '.txt'
- print(new_file_path)
- command = 'C:\\antiword\\antiword -f ' + '"' + src + '"' ' > ' + '"' + new_file_path + '"'
- subprocess.Popen(command, cwd=os.getcwd(), stdin=subprocess.PIPE, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE, shell=True).communicate()
- with open(new_file_path) as f:
- text = f.read()
- os.remove(new_file_path)
- except Exception:
- return None
- for search in searches:
- print("Busca: ", search)
- if search.lower() in text:
- dst = os.path.join(encontra)
- status = "foi encontrado a busca " + search
- break
- else:
- dst = os.path.join(naoencontra)
- status = "nao foi encontrado"
- return [dst, status]
- # -----------------------------------------------------------------------------------------------------------------------------
- # -----------------------------------------------------------------------------------------------------------------------------
- for root, dirs, f in os.walk(caminhoinput):
- print("Estamos em: "+ root)
- print("Pastas contidas: "+ str(dirs))
- print("Arquivos contidos: "+ str(f).decode("utf-8"))
- print("\n")
- for file in f:
- src = os.path.join(root, file)
- if file.endswith((".ini",".xls", ".xlsx",".txt", ".docx", ".doc", ".html", ".py", ".pdf", ".odt", ".png", ".jpg", ".log", ".cfm", ".cab", ".ppt", ".py", ".html", ".pptx")):
- if not os.path.exists(encontra):
- os.mkdir(encontra)
- if not os.path.exists(naoencontra):
- os.mkdir(naoencontra)
- if not os.path.exists(naorelacionados):
- os.mkdir(naorelacionados)
- if file.endswith((".pdf", ".docx", ".odt", ".txt")):
- print("Arquivo "+ file)
- resultado = pdf_doc_txt(src, searches)
- if file.endswith(".doc"):
- print("Arquivo "+ file)
- resultado = docsemx(src, searches)
- if file.endswith(".pptx"):
- print("Arquivo: "+ file)
- resultado = slides_ppt(src, searches)
- if file.endswith(".ppt"):
- print("Arquivo: "+ file)
- resultado = pptsemx(src, searches)
- if file.endswith((".xls", ".xlsx")):
- print("Arquivo: ", file)
- resultado = excel(src, searches)
- if file.endswith((".ini",".png", ".jpg", ".log", ".cfm", ".cab", ".py", ".html")):
- print("Arquivo: ", file)
- resultado = nao_relacionados(src, searches)
- if not resultado:
- print("\nERRO\n")
- resultado[0] = src
- resultado[1] = "problemo"
- shutil.copy(src, resultado[0])
- print("O arquivo "+ str(file) + " foi movido para " + resultado[0] + " pois "+ resultado[1] + "\n")
- k= raw_input("\nAperte qualquer tecla para terminar o programa =)")
- # -----------------------------------------------------------------------------------------------------------------------------
- # -----------------------------------------------------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement