Объединить определенные данные столбца из всех столбцов CSV, где номер студента дублируется - PullRequest
1 голос
/ 23 апреля 2019

Я написал скрипт на Python, который берет данные о студентах из нашей SIS, которые показывают полное расписание занятий для каждого студента.Каждый класс находится в отдельной строке, поэтому у каждого ученика будет несколько строк, потому что у них несколько классов.Сценарий записывает в новый файл CSV, только те данные, которые мне нужны, которые определены в сценарии, чтобы искать только определенные имена классов.

Однако все это работает как положено ....файл, вместо нескольких строк, например:

jane doe, 123456, Language arts, Teacherone@ourdomain.org
jane doe, 123456, Math, Teachertwo@ourdomain.org
Suzie Que, 321256, Math, Teachertwo@ourdomain.org
Suzie Que, 321256, English 101, Teacherthree@ourdomain.org
Johnny Appleseed, 321321, Language Arts, Teacherone@ourdomain.org
Johnny Appleseed, 321321, Math, Teacherone@ourdomai.org

Я хочу, чтобы окончательный CSV-файл выглядел так:

Jane doe, 123456, Language Arts; Math, Teacherone@ourdomain.org; 
Teachertwo@ourdomain.org

Suzie Que, 321256, Math; English 101, Teachertwo@ourdomain.org; 
Teacherthree@ourdomain.org

Johnny Appleseed, 321321, Language Arts; Math, Teacherone@ourdomain.org

Я смотрел на панд, но просто не знаюкак бы это реализовать.

Любая помощь с этим будет принята с благодарностью.

КОД НИЖЕ:

        import csv

def ixl():
    with open(r'C:\Users\sftp\PS\IMPORTED\pythonscripts\ixl\IXL 
CSV\IXL_DATA2.csv') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',')
        with open(r'C:\Users\sftp\PS\IMPORTED\pythonscripts\ixl\IXL 
CSV\NEW_studentexport.csv', mode='w', newline='') as output_file:
            write = csv.writer(output_file, delimiter=',', 
quoting=csv.QUOTE_MINIMAL)
            for row in csv_reader:
                Title = row[6]
                coursename = row[9]
                firstname = row[13]
                lastname = row[16]
                grade = row[14]
                studentnumber = row[17]
                studentidnumber = row[18]
                teacheremail = row[19]
                teacherfirst = row[20]
                teacherlast = row[21]
                stud_username = studentidnumber + "@highpointaca"
                password = int(studentnumber) + int(studentidnumber)


                if Title in ('Math 7', 'Albebra 1', 'Algebra 1 Honors', 
'Algebra 2', 'Algebra 2 Honors', 'Dual Enrollment College Algebra (MAT 
110', 
'Dual Enrollment English Comp. (ENG 102)' , 'Reading 5' , 'Pre-Calculus 
Honors' , 'Pre-Algebra8' , 'Pre-Algebra' , 'Mathematics' , 'Math K' , 
'Math 
7' , 'Math 6 Honors' , 'Math 6' , 'Math 5' , 'Math 4' , 'Math 3' , 'Math 
2' , 
'Math 1' , 'Language Arts 5', 'Language Arts 4', 'Language Arts 3', 
'Language 
Arts 2', 'Language Arts K', 'Language Arts 1', 'Language Arts', 'Geometry 
Honors', 'Geometry', 'Essentials of Math I', 'English 4', 'English 3', 
'English 2', 'English 1 Honors', 'English 1', 'ELA 7 Honors', 'ELA 6 
Honors', 
'ELA 8', 'ELA 7', 'ELA 6', 'Dual Enrollment English Comp. (ENG 101)'):

                    write.writerow([firstname, lastname, studentidnumber, 
grade, teacheremail, stud_username, password, Title])


if __name__ == '__main__':
    ixl()

1 Ответ

0 голосов
/ 23 апреля 2019

Использование модуля csv и collections.defaultdict

Демонстрация:

import csv
from collections import defaultdict

result = defaultdict(list)

with open("input.csv") as infile:     #Read csv
    reader = csv.reader(infile)
    for row in reader:
        result[row[0]].append(row)     #Group by name

final_result = []    
for k, v in  result.items():
    temp = v[0]
    for i in v[1:]:
        temp[2] += ", " + i[2]         #Concatenate subject names
    final_result.append(temp)

with open("output.csv", "w") as outfile:
    writer = csv.writer(outfile)
    writer.writerows(final_result)         #Write back to csv
...