Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.79 KB | None | 0 0
  1. """Create schedule from the given file."""
  2. import re
  3.  
  4.  
  5. def get_table_size(table):
  6. sizes = []
  7. for i in table:
  8. sizes.append(len(i))
  9. x = max(sizes) + 1
  10. return x, sizes
  11.  
  12.  
  13. def create_table(dict1, keys):
  14. table = []
  15. new_keys = []
  16. for i in keys:
  17. if i not in new_keys:
  18. new_keys.append(i)
  19. for i in range(len(new_keys)):
  20. table.append(new_keys[i] + " |")
  21. for j in dict1[new_keys[i]][0][:-1]:
  22. table[i] += " " + j + ","
  23. table[i] += " " + dict1[new_keys[i]][0][-1]
  24. return table
  25.  
  26.  
  27. def get_hour_min(keys,):
  28.  
  29. new_keys = []
  30. for i in keys:
  31. if i == "0 AM":
  32. new_keys.append("12:00")
  33. else:
  34. minutes = int(int(i[:3]) % 60)
  35. hours = int((int(i[:3]) - minutes) / 60)
  36. if hours == 0:
  37. hours = 12
  38. if minutes < 10:
  39. new_keys.append(str(hours) + ":" + "0" + str(minutes))
  40. else:
  41. new_keys.append(str(hours) + ":" + str(minutes))
  42. for i in range(len(keys)):
  43. if keys[i][-2:] == "AM":
  44. new_keys[i] += "AM"
  45. else:
  46. new_keys[i] += "PM"
  47. return new_keys
  48.  
  49.  
  50. def normalize_times(keys, values):
  51. new_keys = []
  52. new_keys2 = []
  53. new_keys3 = []
  54. for i in range(len(keys)):
  55. for j in keys[i]:
  56. if not j.isdigit():
  57. x = keys[i].replace(j, ":")
  58. keys.insert(i, x)
  59. del keys[i + 1]
  60. for i in keys:
  61. if i[-2] == ":":
  62. new_keys.append(i[:-1] + "0" + i[-1])
  63. else:
  64. new_keys.append(i)
  65. for i in new_keys:
  66. if len(i) != 5:
  67. new_keys2.append("0" + i)
  68. else:
  69. new_keys2.append(i)
  70. for i in new_keys2:
  71. x, y = i.split(":")
  72. new_keys3.append(int(x) * 60 + int(y))
  73. return new_keys3
  74.  
  75.  
  76. def normalize_keys2(new_keys3):
  77. new_keys4 = []
  78. new_keys3.sort()
  79. for i in new_keys3:
  80. if i > (12 * 60):
  81. new_keys4.append(str(i - (12 * 60)) + " PM")
  82. else:
  83. new_keys4.append(str(i) + " AM")
  84. return new_keys4
  85.  
  86.  
  87. def create_dict(keys, values):
  88. dict1 = {}
  89. for i in range(len(keys)):
  90. dict1[keys[i]] = []
  91. for i in range(len(keys)):
  92. dict1[keys[i]].append(values[i])
  93. return dict1
  94.  
  95.  
  96. def read_from_file(input_filename):
  97. """Read the file."""
  98. file_object = open(input_filename, 'r') # Avame faili lugemiseks
  99. results = file_object.readlines()
  100. keys1 = ""
  101. for i in range(len(results) - 1):
  102. keys1 += (results[i][:-1])
  103. keys1 += (results[-1])
  104. return keys1
  105.  
  106.  
  107. def create_schedule_file(input_filename: str, output_filename: str) -> None:
  108. """Create schedule file from the given input file."""
  109. string = create_schedule_string(read_from_file(input_filename))
  110. with open(output_filename, 'w', newline='') as file:
  111. file.write(string)
  112.  
  113.  
  114. def create_schedule_string(input_string: str) -> str:
  115. """Create schedule string from the given input string."""
  116. results = ""
  117. values = []
  118. new_values = []
  119. regex = r"(( |^)[0-9]{1,2}(\D)[0-9]{1,2}( )+[a-zA-Z]+)"
  120. matches = re.finditer(regex, input_string, re.MULTILINE | re.UNICODE)
  121. for i in matches:
  122. if i.group(1) not in results:
  123. results += i.group(1)
  124. if len(results) == 0:
  125. return "------------------\n| time | items |\n------------------\n| No items found |\n------------------"
  126. regex = r"((( )+[a-zA-Z]+))"
  127. matches = re.finditer(regex, results, re.MULTILINE | re.UNICODE)
  128. for i in matches:
  129. values.append(i.group(1)[1:])
  130. keys = []
  131. regex = r"(( |^)[0-9]{1,2}(\D)[0-9]{1,2})"
  132. matches = re.finditer(regex, results, re.MULTILINE | re.UNICODE)
  133. for i in matches:
  134. keys.append(i.group(1)[1:])
  135. keys1 = normalize_times(keys, values)
  136. dict1 = create_dict(keys1, values)
  137. keys1.sort()
  138. for i in keys1:
  139. new_values.append(dict1[i])
  140. dict2 = create_dict(get_hour_min(normalize_keys2(keys1)), new_values)
  141. table = create_table(dict2, get_hour_min(normalize_keys2(keys1)))
  142. final = ""
  143. x, sizes = get_table_size(table)
  144. start_end = "-" * (x + 4)
  145. final += start_end + "\n"
  146. final += "|" + " " * 4 + "time" + " |" + " items" + " " * (x - 14) + "|\n"
  147. final += start_end + "\n"
  148. for i in range(len(table)):
  149. if table[i][1] == ":":
  150. final += "| " + table[i].lower() + " " * (x - 1 - sizes[i]) + " |\n"
  151. else:
  152. final += "| " + table[i].lower() + " " * (x - sizes[i]) + " |\n"
  153. final += start_end
  154. return final
  155.  
  156.  
  157. if __name__ == '__main__':
  158. print(create_schedule_string(""))
  159. create_schedule_file("schedule_input.txt", "schedule_output.txt")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement