tpc4 done
This commit is contained in:
parent
c9179c9823
commit
741d95dd79
9 changed files with 194 additions and 0 deletions
4
TPC4/alunos2.csv
Normal file
4
TPC4/alunos2.csv
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Número,Nome,Curso,Notas{5},,,,,
|
||||||
|
3162,Cândido Faísca,Teatro,12,13,14,15,16
|
||||||
|
7777,Cristiano Ronaldo,Desporto,17,12,20,11,12
|
||||||
|
264,Marcelo Sousa,Ciência Política,18,19,19,20,18
|
|
38
TPC4/alunos2.json
Normal file
38
TPC4/alunos2.json
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"Número": "3162",
|
||||||
|
"Nome": "Cândido Faísca",
|
||||||
|
"Curso": "Teatro",
|
||||||
|
"Notas": [
|
||||||
|
12,
|
||||||
|
13,
|
||||||
|
14,
|
||||||
|
15,
|
||||||
|
16
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Número": "7777",
|
||||||
|
"Nome": "Cristiano Ronaldo",
|
||||||
|
"Curso": "Desporto",
|
||||||
|
"Notas": [
|
||||||
|
17,
|
||||||
|
12,
|
||||||
|
20,
|
||||||
|
11,
|
||||||
|
12
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Número": "264",
|
||||||
|
"Nome": "Marcelo Sousa",
|
||||||
|
"Curso": "Ciência Política",
|
||||||
|
"Notas": [
|
||||||
|
18,
|
||||||
|
19,
|
||||||
|
19,
|
||||||
|
20,
|
||||||
|
18
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
4
TPC4/alunos3.csv
Normal file
4
TPC4/alunos3.csv
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Número,Nome,Curso,Notas{3,5},,,,,
|
||||||
|
3162,Cândido Faísca,Teatro,12,13,14,,
|
||||||
|
7777,Cristiano Ronaldo,Desporto,17,12,20,11,12
|
||||||
|
264,Marcelo Sousa,Ciência Política,18,19,19,20,
|
|
35
TPC4/alunos3.json
Normal file
35
TPC4/alunos3.json
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"Número": "3162",
|
||||||
|
"Nome": "Cândido Faísca",
|
||||||
|
"Curso": "Teatro",
|
||||||
|
"Notas": [
|
||||||
|
12,
|
||||||
|
13,
|
||||||
|
14
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Número": "7777",
|
||||||
|
"Nome": "Cristiano Ronaldo",
|
||||||
|
"Curso": "Desporto",
|
||||||
|
"Notas": [
|
||||||
|
17,
|
||||||
|
12,
|
||||||
|
20,
|
||||||
|
11,
|
||||||
|
12
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Número": "264",
|
||||||
|
"Nome": "Marcelo Sousa",
|
||||||
|
"Curso": "Ciência Política",
|
||||||
|
"Notas": [
|
||||||
|
18,
|
||||||
|
19,
|
||||||
|
19,
|
||||||
|
20
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
4
TPC4/alunos4.csv
Normal file
4
TPC4/alunos4.csv
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Número,Nome,Curso,Notas{3,5}::sum,,,,,
|
||||||
|
3162,Cândido Faísca,Teatro,12,13,14,,
|
||||||
|
7777,Cristiano Ronaldo,Desporto,17,12,20,11,12
|
||||||
|
264,Marcelo Sousa,Ciência Política,18,19,19,20,
|
|
20
TPC4/alunos4.json
Normal file
20
TPC4/alunos4.json
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"Número": "3162",
|
||||||
|
"Nome": "Cândido Faísca",
|
||||||
|
"Curso": "Teatro",
|
||||||
|
"Notas": 39
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Número": "7777",
|
||||||
|
"Nome": "Cristiano Ronaldo",
|
||||||
|
"Curso": "Desporto",
|
||||||
|
"Notas": 72
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Número": "264",
|
||||||
|
"Nome": "Marcelo Sousa",
|
||||||
|
"Curso": "Ciência Política",
|
||||||
|
"Notas": 76
|
||||||
|
}
|
||||||
|
]
|
4
TPC4/alunos5.csv
Normal file
4
TPC4/alunos5.csv
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Número,Nome,Curso,Notas{3,5}::media,,,,,
|
||||||
|
3162,Cândido Faísca,Teatro,12,13,14,,
|
||||||
|
7777,Cristiano Ronaldo,Desporto,17,12,20,11,12
|
||||||
|
264,Marcelo Sousa,Ciência Política,18,19,19,20,
|
|
20
TPC4/alunos5.json
Normal file
20
TPC4/alunos5.json
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"Número": "3162",
|
||||||
|
"Nome": "Cândido Faísca",
|
||||||
|
"Curso": "Teatro",
|
||||||
|
"Notas": 13.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Número": "7777",
|
||||||
|
"Nome": "Cristiano Ronaldo",
|
||||||
|
"Curso": "Desporto",
|
||||||
|
"Notas": 14.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Número": "264",
|
||||||
|
"Nome": "Marcelo Sousa",
|
||||||
|
"Curso": "Ciência Política",
|
||||||
|
"Notas": 19.0
|
||||||
|
}
|
||||||
|
]
|
65
TPC4/tpc4.py
Normal file
65
TPC4/tpc4.py
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
import re
|
||||||
|
import json
|
||||||
|
|
||||||
|
def parse_header(header):
|
||||||
|
regex = re.compile(r"(\w+)(?:{(?:(\d+),)?(\d+)}(?:::(\w+))?)?")
|
||||||
|
capture_list = regex.findall(header.strip())
|
||||||
|
|
||||||
|
header_order = []
|
||||||
|
lists = {}
|
||||||
|
funcs = {}
|
||||||
|
|
||||||
|
for id, min, max, func in capture_list:
|
||||||
|
header_order.append(id)
|
||||||
|
if max != "":
|
||||||
|
lists[id] = (int(min) if min else max, int(max))
|
||||||
|
if func != "":
|
||||||
|
funcs[id] = func
|
||||||
|
return header_order, lists, funcs
|
||||||
|
|
||||||
|
|
||||||
|
def parse_data(lines, header_order, lists, funcs):
|
||||||
|
data_regex = ""
|
||||||
|
for id in header_order:
|
||||||
|
if id in lists:
|
||||||
|
min, max = lists[id]
|
||||||
|
if min == max:
|
||||||
|
num = '{' + str(max) + '}'
|
||||||
|
else:
|
||||||
|
num = '{' + str(min) + ',' + str(max) + '}'
|
||||||
|
data_regex += rf"(?P<{id}>([^,]+,?){num}),?"
|
||||||
|
else:
|
||||||
|
data_regex += rf"(?P<{id}>[^,]+),?"
|
||||||
|
data_regex = re.compile(data_regex)
|
||||||
|
|
||||||
|
data = []
|
||||||
|
for line in lines:
|
||||||
|
for match in data_regex.finditer(line.strip()):
|
||||||
|
data.append(match.groupdict())
|
||||||
|
|
||||||
|
for elem in data:
|
||||||
|
for id in header_order:
|
||||||
|
if id in lists:
|
||||||
|
elem[id] = [int(num) for num in re.findall(r"\d+",elem[id])]
|
||||||
|
if id in funcs:
|
||||||
|
if funcs[id] == "sum":
|
||||||
|
elem[id] = sum(elem[id])
|
||||||
|
elif funcs[id] == "media":
|
||||||
|
elem[id] = sum(elem[id]) / len(elem[id])
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
for i in range(2,6):
|
||||||
|
test_file = f"alunos{i}"
|
||||||
|
f = open(f"{test_file}.csv", "r")
|
||||||
|
lines = f.readlines()
|
||||||
|
header_order, lists, funcs = parse_header(lines[0])
|
||||||
|
|
||||||
|
data = parse_data(lines[1:], header_order, lists, funcs)
|
||||||
|
json_file = open(f"{test_file}.json","w")
|
||||||
|
json.dump(data,json_file,indent=4,ensure_ascii=False)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in a new issue