Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """Create schedule from the given file."""
- import re
- def get_table_size(table):
- sizes = []
- for i in table:
- sizes.append(len(i))
- x = max(sizes) + 1
- return x, sizes
- def create_table(dict1, keys):
- table = []
- new_keys = []
- for i in keys:
- if i not in new_keys:
- new_keys.append(i)
- for i in range(len(new_keys)):
- table.append(new_keys[i] + " |")
- for j in dict1[new_keys[i]][0][:-1]:
- table[i] += " " + j + ","
- table[i] += " " + dict1[new_keys[i]][0][-1]
- return table
- def get_hour_min(keys, ):
- new_keys = []
- for i in keys:
- if i == "0 AM":
- new_keys.append("12:00")
- else:
- minutes = int(int(i[:3]) % 60)
- hours = int((int(i[:3]) - minutes) / 60)
- if hours == 0:
- hours = 12
- if minutes < 10:
- new_keys.append(str(hours) + ":" + "0" + str(minutes))
- else:
- new_keys.append(str(hours) + ":" + str(minutes))
- for i in range(len(keys)):
- if keys[i][-2:] == "AM":
- new_keys[i] += "AM"
- else:
- new_keys[i] += "PM"
- return new_keys
- def normalize_times(keys, values):
- new_keys = []
- new_keys2 = []
- new_keys3 = []
- for i in range(len(keys)):
- for j in keys[i]:
- if not j.isdigit():
- x = keys[i].replace(j, ":")
- keys.insert(i, x)
- del keys[i + 1]
- for i in keys:
- if i[-2] == ":":
- new_keys.append(i[:-1] + "0" + i[-1])
- else:
- new_keys.append(i)
- for i in new_keys:
- if len(i) != 5:
- new_keys2.append("0" + i)
- else:
- new_keys2.append(i)
- for i in new_keys2:
- x, y = i.split(":")
- new_keys3.append(int(x) * 60 + int(y))
- return new_keys3
- def normalize_keys2(new_keys3):
- new_keys4 = []
- new_keys3.sort()
- for i in new_keys3:
- if i > (12 * 60):
- new_keys4.append(str(i - (12 * 60)) + " PM")
- else:
- new_keys4.append(str(i) + " AM")
- return new_keys4
- def create_dict(keys, values):
- dict1 = {}
- for i in range(len(keys)):
- dict1[keys[i]] = []
- for i in range(len(keys)):
- dict1[keys[i]].append(values[i])
- return dict1
- def read_from_file(input_filename):
- """Read the file."""
- file_object = open(input_filename, 'r') # Avame faili lugemiseks
- results = file_object.readlines()
- keys1 = ""
- for i in range(len(results) - 1):
- keys1 += (results[i][:-1])
- keys1 += (results[-1])
- return keys1
- def create_schedule_file(input_filename: str, output_filename: str) -> None:
- """Create schedule file from the given input file."""
- string = create_schedule_string(read_from_file(input_filename))
- with open(output_filename, 'w', newline='') as file:
- file.write(string)
- def create_schedule_string(input_string: str) -> str:
- """Create schedule string from the given input string."""
- results = ""
- values = []
- new_values = []
- regex = r"(( )|^[0-9]|([1][0-9])|([2][0-3])(\D)([0-5][0-9])|[0-9]( )+[a-zA-Z]+)"
- matches = re.finditer(regex, input_string, re.MULTILINE | re.UNICODE)
- for i in matches:
- if i.group(1) not in results:
- results += i.group(1) + " "
- if len(results) == 0:
- return "------------------\n| time | items |\n------------------\n| No items found |\n------------------"
- regex = r"([a-zA-Z]+)"
- matches = re.finditer(regex, results, re.MULTILINE | re.UNICODE)
- for i in matches:
- values.append(i.group(1))
- keys = []
- regex = r"(( )|^[0-9]|([1][0-9])|([2][0-3])(\D)([0-5][0-9])|[0-9])"
- matches = re.finditer(regex, results, re.MULTILINE | re.UNICODE)
- for i in matches:
- keys.append(i.group(1))
- keys1 = normalize_times(keys, values)
- dict1 = create_dict(keys1, values)
- keys1.sort()
- for i in keys1:
- new_values.append(dict1[i])
- dict2 = create_dict(get_hour_min(normalize_keys2(keys1)), new_values)
- table = create_table(dict2, get_hour_min(normalize_keys2(keys1)))
- final = ""
- x, sizes = get_table_size(table)
- start_end = "-" * (x + 4)
- final += start_end + "\n"
- final += "|" + " " * 4 + "time" + " |" + " items" + " " * (x - 14) + "|\n"
- final += start_end + "\n"
- for i in range(len(table)):
- if table[i][1] == ":":
- final += "| " + table[i].lower() + " " * (x - 1 - sizes[i]) + " |\n"
- else:
- final += "| " + table[i].lower() + " " * (x - sizes[i]) + " |\n"
- final += start_end + "\n"
- return final
- if __name__ == '__main__':
- print(create_schedule_string("wat 11:00 teine tekst 11:0 jah ei 10:00 pikktekst "))
- create_schedule_file("schedule_input.txt", "schedule_output.txt")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement