helpers.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import csv
  2. import sys
  3. import os
  4. import tkinter as tk
  5. from tkinter import messagebox
  6. import hashlib
  7. import pickle
  8. import filters.ieeeFilter as IEEE, filters.scopusFilter as Scopus, filters.webScienceFilter as WebOfScience
  9. # titulo, abstract, autores, arquivo&linha, DOI, palavras-chave,palavras-chave extras
  10. FINAL_CSV_HEADERS = ['titulo', 'abstract', 'autores', 'doi', 'keywords','extra_keywords', 'fonte']
  11. def loadFiles (files):
  12. loadedFiles = []
  13. for file in files:
  14. loadedFiles.append((csv.DictReader(open(file['path']), delimiter=file['separator']), file))
  15. return loadedFiles
  16. def saveAcceptedCSV (data):
  17. file = open('./accepted.csv', mode='w')
  18. headers = data['header']
  19. writer = csv.writer(file, delimiter=',')
  20. writer.writerow(headers)
  21. data.pop('header')
  22. for row in data.values():
  23. writer.writerow(row)
  24. file.flush()
  25. file.close()
  26. def saveRejectedCSV (data):
  27. file = open('./rejected.csv', mode='w')
  28. headers = data['header']
  29. writer = csv.writer(file, delimiter=',')
  30. writer.writerow(headers)
  31. data.pop('header')
  32. for row in data.values():
  33. writer.writerow(row)
  34. file.flush()
  35. file.close()
  36. def writeFinalLog (data):
  37. file = open("./log.txt", mode='w')
  38. file.write("accepted: {0}\nrejected: {1}\nduplicated: {2}\n".format(data['accepted'],data['rejected'],data['duplicate']))
  39. file.flush()
  40. file.close()
  41. def removeStateFile ():
  42. try:
  43. os.remove('./.csvstate')
  44. except Exception:
  45. pass
  46. def saveState (data):
  47. file = open('./.csvstate', mode='wb')
  48. pickle.dump(data, file)
  49. file.close()
  50. def loadState (root):
  51. try:
  52. file = open('./.csvstate', mode='rb')
  53. answer = tk.messagebox.askyesno("State lading","Load last session state?")
  54. if answer:
  55. data = pickle.load(file)
  56. file.close()
  57. return data
  58. except Exception:
  59. pass
  60. return {'file_index':0, 'row_index':0, 'accepted':0, 'rejected':0, 'duplicate': 0}
  61. def loadConfigFile ():
  62. files = list()
  63. try:
  64. file = open('./csvconfig.txt')
  65. rawData = file.read()
  66. lines = rawData.split('\n')
  67. for line in lines:
  68. parameters = line.split(':')
  69. separator = parameters[2].encode('utf-8').decode("unicode_escape")
  70. fileConfig = {'path': parameters[0], 'filter': parameters[1], 'separator': separator}
  71. files.append(fileConfig)
  72. file.close()
  73. return files
  74. except FileNotFoundError:
  75. return list()
  76. def getFilter (file):
  77. if file['filter'] == 'ieee':
  78. return IEEE.IEEEFilter()
  79. elif file['filter'] == 'scopus':
  80. return Scopus.ScopusFilter()
  81. elif file['filter'] == 'webscience':
  82. return WebOfScience.WebScience()
  83. else:
  84. raise Exception('Undefined filter '+file['filter'])
  85. def restoreAcceptedCSV ():
  86. try:
  87. file = open('./accepted.csv')
  88. rows = list(csv.reader(file))
  89. data = {}
  90. if len(rows) == 0:
  91. return data
  92. data['header'] = rows[0]
  93. for i in range(1,len(rows)):
  94. digest = hashlib.sha256(str.encode(rows[i][0])).hexdigest()
  95. data[digest] = rows[i]
  96. return data
  97. except FileNotFoundError:
  98. return {}
  99. def restoreRejectedCSV ():
  100. try:
  101. file = open('./rejected.csv')
  102. rows = list(csv.reader(file))
  103. data = {}
  104. if len(rows) == 0:
  105. return data
  106. data['header'] = rows[0]
  107. for i in range(1,len(rows)):
  108. digest = hashlib.sha256(str.encode(rows[i][0])).hexdigest()
  109. data[digest] = rows[i]
  110. return data
  111. except FileNotFoundError:
  112. return {}