문제
inputdata1.csv 와 inputdata2.csv 를 입력으로 받아서 sample.csv와 같은 형태로 결과를 만드는 프로그램을 작성해라.
myFile
클래스를 만들어서 풀이해라.
inputdata1.csv
ID,Name
20190001,Apple
20190003,Pear
20190002,Orange
inputdata2.csv
ID,Class1,Class2,Class3
20190003,90,90,98
20190002,45,12,37
20190009,10,10,10
20190001,89,92,35
sample.csv
ID,Name,Course 1,Course 2,Course 3,Average
20190001,Apple,89,92,35,72
20190002,Orange,45,12,37,31
20190003,Pear,90,90,98,92
풀이
# ANSWER : START
import csv
class myFile:
def __init__(self, fileName = None, fileMode = None):
self.__fileName = fileName
self.__fileMode = fileMode
self.__fileList = []
if self.__fileMode == "r" and self.__fileName != None:
self.file = open(self.__fileName, self.__fileMode)
read_file = csv.reader(self.file)
for line in read_file:
self.__fileList.append(line)
self.__fileList[1:] = sorted(self.__fileList[1:])
elif self.__fileMode == "w" and self.__fileName != "":
self.file = open(self.__fileName, self.__fileMode)
def getStatus(self):
if self.__fileList != [] or self.__fileMode == "w":
return True
else:
print("파일이 열리지 않았음 status = false")
return False
def getBody(self):
if self.getStatus() == True:
return self.__fileList[1:]
else:
print("파일이 열리지 않아 body 출력이 불가합니다.")
return False
def setContentHead(self,fileHeader = None):
if self.getStatus() == True and fileHeader != None:
self.__fileHeader = fileHeader
return True
else:
print("fileHeader 가 주어지지 않았거나, 파일이 열리지 않았습니다.")
return False
def setContentBody(self, fileContent = None):
if self.getStatus() == True and fileContent != None:
self.__fileContent = fileContent
return True
else:
print("fileContent 가 주어지지 않았거나, 파일이 열리지 않았습니다.")
return False
def writeFile(self):
if self.getStatus() == True:
myWriter = csv.writer(self.file)
myWriter.writerow(self.__fileHeader)
for i in range(len(self.__fileContent)):
myWriter.writerow(self.__fileContent[i])
return True
else:
print("파일이 열리지 않았습니다.")
return False
def closeFile(self):
if self.getStatus() == True:
self.file.close()
return True
else:
print("파일이 열리지 않았습니다.")
return False
def mergeList(li1, li2):
result = []
temp = []
for i in range(len(li1)):
for j in range(len(li2)):
if li1[i][0] == li2[j][0]:
temp = []
temp.append(li1[i][0])
temp.append(li1[i][1])
temp.append(li2[j][1])
temp.append(li2[j][2])
temp.append(li2[j][3])
sum = 0
for k in range(1,4):
sum = sum + int(li2[j][k])
temp.append(str(int(sum/3)))
result.append(temp)
result = sorted(result)
return result
# ANSWER : END
file1 = myFile("inputdata1.csv", 'r')
file2 = myFile("inputdata2.csv", 'r')
if (file1.getStatus() != False) and (file2.getStatus() != False):
newList = mergeList(file1.getBody(), file2.getBody())
file3 = myFile("output.csv", 'w')
file3.setContentHead(["ID", "Name", "Course 1", "Course 2", "Course 3", "Average"])
file3.setContentBody(newList)
file3.writeFile()
file3.closeFile()
else:
print("input file error")
file1.closeFile()
file2.closeFile()