Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.76 KB | None | 0 0
  1. import os, sys
  2. import subprocess
  3. import shutil
  4. import re
  5. from PyPDF2 import PdfFileReader
  6. from docx import *
  7. from django.utils.encoding import smart_text
  8. import xlrd
  9. from pdfminer import *
  10. import textract
  11. import pandas as pd
  12. from pptx import Presentation
  13. from tika import parser
  14.  
  15. # -----------------------------------------------------------------------------------------------------------------------------
  16. # --------------------------------------------------------INPUTS---------------------------------------------------------------
  17.  
  18. print("\n\t\tDivisao de arquivos por conteudo\n")
  19. caminhoinput = raw_input("\nEntre com o caminho da pasta principal onde deseja buscar buscar: \nex: '\pasta\exemplo'\nobs: nao de espacos\n")
  20. local = raw_input("\nEntre com o caminho da pasta onde os arquivos serao movidos: \nex: '\pasta\exemplo'\nobs:nao de espacos\n")
  21. 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")
  22. searches = re.split('[,]', search)
  23. encontra = str(local) + "\_" +"busca_encontrada"
  24. naoencontra = str(local) + "\_" + "busca_nao_encontrada"
  25. naorelacionados = str(local) + "\_" + "nao_relacionados_c_a_busca"
  26.  
  27. # -----------------------------------------------------------------------------------------------------------------------------
  28. # -----------------------------------------Visual-------------------------------------------------------------------------------
  29.  
  30. print("\n\t\tEstamos buscando por:\n")
  31. for search in searches:
  32. print(search)
  33. print("\n\t\tRealizando busca\n")
  34.  
  35. # -----------------------------------------------------------------------------------------------------------------------------
  36. # ----------------------------------------Funcoes para cada tipo de arquivo-----------------------------------------------------
  37.  
  38. def pdf_doc_txt(src, searches):
  39. Text = textract.process(src, encoding="utf-8").decode("utf-8").lower()
  40. for search in searches:
  41. if search.lower() in Text:
  42. dst = os.path.join(encontra)
  43. status = "foi encontrado a busca " + search
  44. break
  45. else:
  46. dst = os.path.join(naoencontra)
  47. status = "nao foi encontrado"
  48. return [dst, status];
  49.  
  50. def nao_relacionados(src, searches):
  51. for search in searches:
  52. if re.search(search, str(file)):
  53. dst = os.path.join(encontra)
  54. status = "foi encontrado " + search
  55. break
  56. else:
  57. dst = os.path.join(naorelacionados)
  58. status = "nao relacionado"
  59. return [dst, status];
  60.  
  61. def excel(src, searches):
  62. wb = pd.read_excel(src, skip_blank_lines=True, encoding_override="utf-8")
  63. wb.dropna(how="all", inplace=True)
  64. for search in searches:
  65. for index, row in wb.head().iterrows():
  66. if search.lower() in repr(row).lower():
  67. dst = os.path.join(encontra)
  68. status = "foi encontrado " + search
  69. break
  70. else:
  71. dst = os.path.join(naoencontra)
  72. status = "nao foi encontrado"
  73. return[dst, status]
  74.  
  75. def slides_ppt(src, searches):
  76. text_runs = []
  77. f = open(src, "rb")
  78. prs = Presentation(f)
  79. for slide in prs.slides:
  80. for shape in slide.shapes:
  81. if not shape.has_text_frame:
  82. continue
  83. for paragraph in shape.text_frame.paragraphs:
  84. for run in paragraph.runs:
  85. text_runs.append(run.text)
  86. f.close()
  87. for search in searches:
  88. if search.lower() in str(text_runs).lower():
  89. dst = os.path.join(encontra)
  90. status = "foi encontrado " + search
  91. break
  92. else:
  93. dst = os.path.join(naoencontra)
  94. status = "nao foi encontrado"
  95. return [dst, status]
  96.  
  97. def pptsemx(src, searches):
  98. parsed = parser.from_file(src)
  99. print(src)
  100. for search in searches:
  101. if search.lower() in parsed["content"].lower():
  102. dst = os.path.join(encontra)
  103. status = "foi encontrado " + search
  104. break
  105. else:
  106. dst = os.path.join(naoencontra)
  107. status = "nao foi encontrado"
  108. return [dst, status]
  109.  
  110. def docsemx(src, searches):
  111. try:
  112. new_file_path = src.split(".")
  113. print(new_file_path)
  114. print("ponto", new_file_path[-1])
  115. del new_file_path[-1]
  116. new_file_path = ''.join(new_file_path) + '.txt'
  117. print(new_file_path)
  118. command = 'C:\\antiword\\antiword -f ' + '"' + src + '"' ' > ' + '"' + new_file_path + '"'
  119. subprocess.Popen(command, cwd=os.getcwd(), stdin=subprocess.PIPE, stdout=subprocess.PIPE,
  120. stderr=subprocess.PIPE, shell=True).communicate()
  121. with open(new_file_path) as f:
  122. text = f.read()
  123. os.remove(new_file_path)
  124. except Exception:
  125. return None
  126. for search in searches:
  127. print("Busca: ", search)
  128. if search.lower() in text:
  129. dst = os.path.join(encontra)
  130. status = "foi encontrado a busca " + search
  131. break
  132. else:
  133. dst = os.path.join(naoencontra)
  134. status = "nao foi encontrado"
  135. return [dst, status]
  136.  
  137. # -----------------------------------------------------------------------------------------------------------------------------
  138. # -----------------------------------------------------------------------------------------------------------------------------
  139.  
  140. for root, dirs, f in os.walk(caminhoinput):
  141. print("Estamos em: "+ root)
  142. print("Pastas contidas: "+ str(dirs))
  143. print("Arquivos contidos: "+ str(f).decode("utf-8"))
  144. print("\n")
  145. for file in f:
  146. src = os.path.join(root, file)
  147. if file.endswith((".ini",".xls", ".xlsx",".txt", ".docx", ".doc", ".html", ".py", ".pdf", ".odt", ".png", ".jpg", ".log", ".cfm", ".cab", ".ppt", ".py", ".html", ".pptx")):
  148. if not os.path.exists(encontra):
  149. os.mkdir(encontra)
  150. if not os.path.exists(naoencontra):
  151. os.mkdir(naoencontra)
  152. if not os.path.exists(naorelacionados):
  153. os.mkdir(naorelacionados)
  154. if file.endswith((".pdf", ".docx", ".odt", ".txt")):
  155. print("Arquivo "+ file)
  156. resultado = pdf_doc_txt(src, searches)
  157. if file.endswith(".doc"):
  158. print("Arquivo "+ file)
  159. resultado = docsemx(src, searches)
  160. if file.endswith(".pptx"):
  161. print("Arquivo: "+ file)
  162. resultado = slides_ppt(src, searches)
  163. if file.endswith(".ppt"):
  164. print("Arquivo: "+ file)
  165. resultado = pptsemx(src, searches)
  166. if file.endswith((".xls", ".xlsx")):
  167. print("Arquivo: ", file)
  168. resultado = excel(src, searches)
  169. if file.endswith((".ini",".png", ".jpg", ".log", ".cfm", ".cab", ".py", ".html")):
  170. print("Arquivo: ", file)
  171. resultado = nao_relacionados(src, searches)
  172. if not resultado:
  173. print("\nERRO\n")
  174. resultado[0] = src
  175. resultado[1] = "problemo"
  176. shutil.copy(src, resultado[0])
  177. print("O arquivo "+ str(file) + " foi movido para " + resultado[0] + " pois "+ resultado[1] + "\n")
  178.  
  179. k= raw_input("\nAperte qualquer tecla para terminar o programa =)")
  180.  
  181. # -----------------------------------------------------------------------------------------------------------------------------
  182. # -----------------------------------------------------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement