컴퓨터를 통한 문제 해결을 위해서 우리는 정수, 실수, 문자열 등을 프로그램 실행중에 만들어서 사용하였다.
하지만 실제 큰 프로그램들은 수시간 수년동안 쌓여진 데이터를 취급하는 목적으로 사용하며, 이경우 컴퓨터의 전원이 꺼져도 유지되는 디스크의 파일 사용은 필수적인다.
본 수업에서는 어떻게 파을 열고 닫으며, 내용을 읽고 쓰는지를 배운다.
하지만 본 수업에서는 파일에 대한 모든 것을 다룰수는 없다.
소프트웨어 전공 수업에는 파일 처리(File Structure)
라는 과목이 있으며, 이 수업에서 파일을 다루는 복잡한 많은 내용을 다루게 된다.
따라서 본 수업에서의 기초적인 지식을 토대로 추가적인 학습을 한다면, 본인의 프로그램이 디스트에 저장된 큰 파일을 처리하는 등의 목적을 이룰수 있다.
Python과 같은 프로그래밍 언어에서는 파일을 열고 닫는 문법을 제공하는데, 연 파일은 반드시 닫아야 합니다.
열기만 하고 닫지 않은 파일은 프로그램의 동작시에 작업한 내용이 제대로 반영이 안되거니, 최악의 경우는 파일에 오류가 생겨서 사용이 불가할 수도 있습니다.
Python에서 파일을 여는 문법은 open()
함수이며, 반대로 닫는 문법은 close()
함수입니다.
다음의 예제는 프로그램이 실행되는 디렉토리에 위치한 Step_13_SampleFile_score.csv
파일을 열고 닫는 예제입니다.
file = open('Step_13_SampleFile_score.csv', 'r')
file.close()
첫번째 줄에서 볼 수 있듯이, open()
함수는 첫번째 입력 파라메타로 파일의 이름을 문자열로 받습니다.
두번째 입력 파라메타는 파일을 여는 용도를 의미하며 'r'
은 read-only
를 의미하여, 읽기만 하고 수정은 불가능하게 하겠다는 의미입니다.
쓰기가 가능한 옵션 등은 Python 언어의 파일 관련 설명인 < https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files > 등을 참조하기 바랍니다.
두번째 줄은 open()
으로 열었던 파일을 다시 닫는 문법을 의미합니다.
open()
은 파일 Class에 대한 객체(Object)를 전달함으로, 우리는 file
이 멤버 Methods를 가질 것이라는 사실을 알수 있습니다.
따라서 파일 Class의 객체인 file
의 멤버 Methods인 close()
함수를 호출하여, 객체 file
이 연 Step_13_SampleFile_score.csv
파일을 닫습니다.
아래의 입력 창에 위의 코드를 입력해서 실제로 실행해 보기 바랍니다.
file = open('Step_13_SampleFile_score.csv', 'r')
file.close()
파일의 내용을 통채로 한번에 읽고 싶은 경우는 read()
를 사용하면 됩니다.
아래의 예제는 파일을 열고, 본문을 모두 읽어서 문자열인 contents
에 저장한 후, 이를 화면에 출력하는 것을 보여주는 예제입니다.
file = open('Step_13_SampleFile_score.csv', 'r')
contents = file.read()
print(contents)
file.close()
아래의 입력 창에 위의 코드를 입력해서 실제로 실행해 보기 바랍니다.
file = open('Step_13_SampleFile_score.csv', 'r')
contents = file.read()
print(contents)
file.close()
ID,Python,C++,Javascript,Go 20190001,A,A,A,A 20190002,A,B,A,C 20190003,C,B,C,A 20190004,B,B,B,B
위의 예제를 실행해 보면, Step_13_SampleFile_score.csv
파일에는 일종의 표가 있는 것을 알수 있습니다.
즉, 파일의 첫줄은 ID, Python, C++, Javascript, Go
라는 항목을 의미하고,
나머지 세줄은 각각 ID
가 20190001/20190002/20190003
인 학생의 각 프로그래밍 언어별 성적임을 알수 있습니다.
이렇듯이 확장자가 .csv
로 끝나는 파일은 텍스트 형태로 일종의 표를 저장하는 파일로서,
Microsoft Excel과 같은 스프레드 시트 프로그램에서 파일 저장시 옵션을 주어서 쉽게 만들수 있습니다.
반대로 프로램에서 이런 형태로 저장하면 스프레드 시트 프로그램 읽고 처리하는 것이 가능합니다.
앞서에서 open()
함수와 close()
함수를 이용하여 파일을 열고 닫는 방법을 설명했습니다.
이렇게 두개의 함수를 사용하는 방법은 매우 단순하고 직관적이지만, 프로그래머가 깜빡 잊어서 close()
함수를 실행하지 않는 경우가 있습니다.
이런 오류를 피하기 위하여 Python에는 생소한 형태이지만 편리한 with
문법을 제공합니다.
아래 코드는 위의 파일의 내용을 통채로 읽는 방법 이해하기
에서 만든 프로그램과 동일한 프로그램을 with
문법을 사용하여 만든 예제입니다.
file
객체로 Step_13_SampleFile_score.csv
여는 것에 문제 없다면, contents = file.read()
구문을 수행합니다.
피일을 열어서 해야할 작업을 마치면, 파일은 자동으로 닫히게 되므로, 별도의 close()
함수 호출은 필요 없습니다.
with open('Step_13_SampleFile_score.csv', 'r') as file:
contents = file.read()
print(contents)
아래의 입력 창에 위의 코드를 입력해서 실제로 실행해 보기 바랍니다.
with open('Step_13_SampleFile_score.csv', 'r') as file:
contents = file.read()
print(contents)
ID,Python,C++,Javascript,Go 20190001,A,A,A,A 20190002,A,B,A,C 20190003,C,B,C,A 20190004,B,B,B,B
파일 안의 데이터를 의미있게 사용하려면, 피일의 내용을 한줄씩 읽어서 프로그래밍을 하기 용이한 형태도 바꾸는 것이 일반적입니다.
앞서 Step_13_SampleFile_score.csv
도 자세히 살펴보면, 2차원 테이블 형태로, 한줄을 여러 5개의 아이템이 있는 리스트로 보는 것이 맞습니다.
따라서 피일은 Python 안에서 아이템을 5개 갖는 리스트들의 집합(List in Lists
)으로 보면 의미있게 처리가 가능한 것입니다.
아래의 프로그램은 지금까지 수업에서 배운 문법을 모두 동원하여,
파일의 표를 프로그램 안에서 의미있게 활용 할 수 있는 리스트들의 집합(List in Lists
) 형태로 변환하는 예제입니다.
Point.1
로 명시한 부분은 앞서 for
반복문에서 사용한 문법와 유사한 의미를 갖는데,
file
에서 한줄씩 읽어서 lineContent
문자열에 넣는다는 의미입니다.
Point.1
로 명시한 부분이 복잡하게 느껴질 수 있지만, 하나 하나 읽다보면 크게 어렵지 않습니다.
첫번째로 lineContent.strip('\n')
은 파일에서 읽은 한줄에서 '\n'
를 제거하겠다는 의미입니다.
이는 텍스트 파일에서 줄이 바뀌는 부분에서 줄 바꿈 특수 기호인 '\n'
이 삽입되는데, 이는 데이터의 원래 의미와 상관 없으므로 제거하는 것입니다.
두번째로 .split(',')
은 '\n'
이 제거된 줄에서, 다시 ,
기호로 나뉜 값들을 각각 아이템화 하여 새로운 리스트를 만드는 것입니다.
이렇게 함으로써 피일의 20190001,A,A,A,A
는 결국 다섯개의 아이템을 갖는 리스트로 변합니다.
마지막으로 피일에서 한둘을 읽어서 다섯개의 아이템을 갖는 리스트로 변환한 정보를 fileMatrix
에 추가하는 작업을 합니다.
이렇게 함으로서, 파일의 한줄이 리스트가 되어, 복수의 줄만큼의 리스트를 갖는 리스트들의 집합(List in Lists
)을 만들어 냈습니다.
fileMatrix = []
with open('Step_13_SampleFile_score.csv', 'r') as file:
for lineContent in file: # Point.1
fileMatrix.append(lineContent.strip('\n').split(',')) # Point.2
print(fileMatrix)
아래의 입력창에 직접 위의 프로그램을 입력하고 실행해보도록 합니다.
사용한 문자열 제어 함수가 잘 이해되지 않으면,
다시 한번 < https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str > 등의 문자열 Methods에 대한 자료를 읽고 이해해 봅니다.
같은 기능을 하는 프로그램을 for
문법, open()
함수와 close()
함수로 구현한 예제가 다음과 같다.
새롭게 등장한 부분은 객체 Class의 멤버 Methods인 readline()
함수이다.
이 함수는 파일 객체로 부터 한줄을 읽어서 문자열로 돌려주는 기능을 한다.
fileMatrix = []
file = open('Step_13_SampleFile_score.csv', 'r')
lineContent = file.readline()
while lineContent != '':
fileMatrix.append(lineContent.strip('\n').split(','))
lineContent = file.readline()
print(fileMatrix)
file.close
아래의 입력창에 직접 위의 프로그램을 입력하고 실행해보도록 합니다.
fileMatrix = []
file = open('Step_13_SampleFile_score.csv', 'r')
lineContent = file.readline()
while lineContent != '':
fileMatrix.append(lineContent.strip('\n').split(','))
lineContent = file.readline()
print(fileMatrix)
file.close
[['ID', 'Python', 'C++', 'Javascript', 'Go'], ['20190001', 'A', 'A', 'A', 'A'], ['20190002', 'A', 'B', 'A', 'C'], ['20190003', 'C', 'B', 'C', 'A'], ['20190004', 'B', 'B', 'B', 'B']]
<function TextIOWrapper.close()>
파일은 프로그램이 수행되는 컴퓨터 안에만 있는 것은 아입니다.
다음의 예제는 인터넷을 통해서 다른 웹사이트에 있는 파일을 열고, 해당 파일의 내용을 한줄씩 읽어서 화면에 출력하고, 파일을 닫는 예제입니다.
import urllib.request
url = "http://robjhyndman.com/tsdldata/ecology1/hopedale.dat"
webpage = urllib.request.urlopen(url)
for line in webpage:
line = line.strip()
line = line.decode('utf-8')
print(line)
webpage.close()
배우지 않은 부분이 있지만, 수업의 후반부에서 웹에 대한 내용을 배울 예정이므로, 아래의 입력창에 직접 위의 프로그램을 입력하고 실행해보도록 합니다.
import urllib.request
url = "http://robjhyndman.com/tsdldata/ecology1/hopedale.dat"
webpage = urllib.request.urlopen(url)
for line in webpage:
line = line.strip()
line = line.decode('utf-8')
print(line)
webpage.close()
Coloured fox fur production, HOPEDALE, Labrador,, 1834-1925 #Source: C. Elton (1942) "Voles, Mice and Lemmings", Oxford Univ. Press #Table 17, p.265--266 22 29 2 16 12 35 8 83 166 62 77 42 54 56 5 9 78 151 27 14 71 261 22 3 16 70 7 2 26 27 35 9 11 73 39 22 41 31 60 7 28 43 17 26 35 60 75 18 58 38 28 26 29 43 16 40 25 28 12 22 13 52 90 103 15 26 29 102 31 9 33 90 95 17 35 59 115 12 26 38 202 25 83 92 58 0 19 63 108 25 38 231
기존 파일의 내용을 그대로 둔채 마지막 부분에 추가적인 정보를 추가하는 경우는, open()
의 옵션을 앞서의 r
이 아닌 a
를 줍니다.
a
옵션의 의미는 append
로서, 기존 화파의 끝에 새로운 정보를 추가하게 됩니다.
앞서의 ''Step_13_SampleFile_score.csv'' 파일에 정보를 정보를 추가하는 파일은 다음과 같습니다.
with open('Step_13_SampleFile_score.csv', 'r') as file:
contents = file.read()
print("[Before append]")
print(contents)
with open('Step_13_SampleFile_score.csv', 'a') as file: # Point.1
file.write("20190004,B,B,B,B\n") # Point.2
with open('Step_13_SampleFile_score.csv', 'r') as file:
contents = file.read()
print("[After append]")
print(contents)
위의 코드에서 Point.1
과 같이 파일을 열때 a
옵션으로 여는 것을 볼수 있습니다.
그리고 Point.2
에서 새롭게 등장한 함수 write()
는 이름 그대로 주어진 문자열을 파일에 저장하는 역할을 합니다.
이 두줄을 제외한 코드는 파일에 정보를 추가하기 전과 후의 내용을 보기 위한 코드이며, 이미 설명한 내용들로 이루어져 있습니다.
위의 프로그램을 아래의 입력창에서 직접 입력하고 실행해 보기 바랍니다.
with open('Step_13_SampleFile_score.csv', 'r') as file:
contents = file.read()
print("[Before append]")
print(contents)
with open('Step_13_SampleFile_score.csv', 'a') as file: # Point.1
file.write("20190004,B,B,B,B\n") # Point.2
with open('Step_13_SampleFile_score.csv', 'r') as file:
contents = file.read()
print("[After append]")
print(contents)
[Before append] ID,Python,C++,Javascript,Go 20190001,A,A,A,A 20190002,A,B,A,C 20190003,C,B,C,A 20190004,B,B,B,B [After append] ID,Python,C++,Javascript,Go 20190001,A,A,A,A 20190002,A,B,A,C 20190003,C,B,C,A 20190004,B,B,B,B 20190004,B,B,B,B
csv
모듈 활용 포함)¶완전히 새로운 파일을 출력 용도로 필요로 하는 경우가 있으면, open()
의 옵션으로 w
를 줍니다.
w
옵션의 의미는 write
로서, 기존에 동일한 이름의 파일이 있다면, 이를 제거하고 새롭게 빈 파일을 출력 전용으로 만들게 됩니다.
학교에 새로운 언어에 대한 교육과정이 개설되었고, 기존의 학생들도 새롭게 이수를 해야 한다고 가정합니다.
이미 학생들이 있고, 학생들이 이수한 과목과 성적이 있으므로, 이 정보들은 모두 유지되어야 합니다.
따라서 기존 파일을 열어서, 기존 학생의 학번과 이미 이수한 과목과 성적 점수는 유지하되,
새롭게 생성된 과목의 column을 학생별로 추가하고, 일단 이수를 하지 않았으니 성적은 미정으로 명시하고자 합니다.
이 경우 Step_13_SampleFile_score.csv
파일에 새로운 필드인 HTML5와 CSS3를 추가하려면, append
로는 안되기에 새롭게 출력 파일을 만들어야 합니다.
아래의 프로그램은 이처럼, Step_13_SampleFile_score.csv
파일을 입력 용도로 활용하여, 기존 학생들의 정보를 읽어 들인후,
Step_13_SampleFile_newScore.csv
파일을 출력 용도로 하여, 새로운 과목을 반영한 형태로 저장하게 됩니다.
import csv
fileMatrix = []
with open('Step_13_SampleFile_score.csv', 'r') as fileRead:
for lineContent in fileRead:
fileMatrix.append(lineContent.strip('\n').split(','))
print("[Before]")
print(fileMatrix)
fileMatrix[0].extend(["HTML5", "CSS3"])
lenFileMatrix = len(fileMatrix)
for i in range(lenFileMatrix - 1):
i = i + 1
fileMatrix[i].extend(["_", "_"])
print("[After]")
print(fileMatrix)
with open('Step_13_SampleFile_newScore.csv', 'w') as fileWrite:
myWriter = csv.writer(fileWrite)
for i in range(lenFileMatrix):
myWriter.writerow(fileMatrix[i])
처음 접하는 사람이 편하게 이해하기 위하여, 비교적 많은 라인이 추가되었는데요.
지금까지 위에서 설명한 모든 내용을 포함해서, 위의 프로그램을 천천히 위에서 아래 한줄 한줄 설명을 할테니, 잘 이해해 보기 바랍니다.
특별히 csv
파일 형태는 자주 사용하는 지라, Python은 이미 csv
파일처리를 위한 기능을 별도의 csv
모듈로 제공하는데, 이를 사용해 봅니다.
줄의 시작은 줄별로 설명을 편히 하기 위하여 줄번호로 하였으니, 참조하세요.
01 import csv
2차원 형태의 표로 정형화된 데이터(= 행렬)는 데이터 사이언스 분야의 가장 기초가 되는 정보 형태입니다.
따라서 Python은 언어에서 기본적으로 csv 형태의 파일을 다루는 모듈이 이름 그대로 csv 모듈
로 제공되고 있습니다.
많은 기능을 제공하는데 구체적인 부분은 < https://docs.python.org/3/library/csv.html >를 참조하기 바랍니다.
이 프로그램에서 csv 모듈
을 쓰는 이유는 하나입니다.
앞서 csv
파일을 열어서 한줄의 문자열을 다루기 용이한 리스트로 바꾸기 위하여 많은 작업을 했는데(아래 3~5번 줄), 반대의 작업을 하려니 귀찮은 거죠.
따라서 리스트를 다시 문자열로 만들어서 저장하려는 작업을 기존의 csv 모듈
기능을 활용(아래 15~18번 줄(하여 쉽게 하고자 할 뿐입니다.
관심이 있다면, csv 모듈
의 파일 열기 기능을 활용하여 아래 3~5번 줄도 보다 쉽게 할 수 있으니 시도해 보기 바랍니다.
02 fileMatrix = []
파일은 결국 프로그램에서 동적으로 다루는 데이터로 다루어 지며, 2차원의 테이블 형태를 유지하기 위하여, List in Lists로 처리합니다.
따라서 아무런 정보가 없는 리스트를 fileMatrix라는 이름으로 미리 만듭니다.
03 with open('Step_13_SampleFile_score.csv', 'r') as fileRead:
프로그램이 실행되는 디렉토리에서 Step_13_SampleFile_score.csv
을 찾아서, 읽기 전용 모드(r
)로 엽니다.
실제 프로그램에서는 이 파일을 fileRead
라는 파일 Class의 객체로 다루게 됩니다.
with
명령은 파일의 close()
를 자동으로 실행하기에 파일을 다루는데 안전한 환경을 제공합니다.
이제 성공적으로 파일을 열었다면, :
에 속한 하위 문장들을 수행할 수 있습니다.
04 for lineContent in fileRead:
입력 파일인 fileRead
객체에서 한줄 한줄을 읽어서 lineContent
에 문자열의 형태로 저장하게 됩니다.
마지막 줄을 읽고나면 더 읽은 정보가 없기에, for
구문이 종료하게 됩니다.
05 fileMatrix.append(lineContent.strip('\n').split(','))
처음 보면 복잡해 보이지만, 하나 하나 뜯어보면 별것 없습니다.
먼저 파일에서 읽어온 lineContent
는 문자열로서, 리스트로 바꾸기 위해서는 변환이 필요합니다.
가장 먼저 해야할 일은 파일에 저장하기 위하여, 줄마다 추가한 줄바꿈 기호("\n"
)를 읽어들이는 줄마다 제거하는 것입니다.
이를 위한 코드가 strip('\n')
입니다.
따라서 읽어드린 한줄의 마지막 부분의 "\n"
을 제거해야 하므로 lineContent.strip('\n')
이 됩니다.
이렇게 만든후, 다시 문자열에 쉼표(","
)로 나뉜 아이템들을 리스트로 변환하여야 하므로, split(',')
함수를 실행합니다.
이렇게 모든 과정을 마치면 리스트에 아이템들이 채워지게 되는 형태가 되고, 이 리스트를 앞서의 fileMatrix
에 추가합니다.
반복 작업을 하면서, 결국 파일의 한줄은 한명의 성적에 해당하는 리스트로 변환되어, 최종 테이블에 추가되는 셈입니다.
06 print("[Before]")
07 print(fileMatrix)
제대로 파일의 정보가 List in Lists
의 형태로 변환이 되었는지 화면에 출력해 봅니다.
08 fileMatrix[0].extend(["HTML5", "CSS3"])
우리가 작업을 하는 목적은 기존 과목에 추가로 두개의 과목인 HTML5
와 CSS3
가 추가된 것이므로,
제일 먼저 테이블의 첫번째 줄(인덱스가 0인 리스트)에 과목명을 추가하게 됩니다.
09 lenFileMatrix = len(fileMatrix)
다음은 기존의 학생들에게 새로운 과목의 성적은 아직 없으니, 공란을 추가해야 합니다.
그런데 학생이 몇명인지를 알아야지, 학생들만큼의 정보에 새로운 과목의 성적을 넣을수 있을테니, 전체 학생수를 계산합니다.
여기에는 한가지 주의할 사항이 있습니다.
맨 첫째줄은 과목명이 있으므로, 실제 학생수는 위의 계산 값보다 하나 작다는 점입니다.
그래서 아래의 10번 중에서 계산한 학생수에서 하나 적은 만큼의 반복을 하게 됩니다.
10 for i in range(lenFileMatrix - 1):
11 i = i + 1
12 fileMatrix[i].extend(["_", "_"])
이 세줄은 한번에 설명하는게 맞을것 같네요.
먼저 10번줄은 첫번째 줄이 과목명을 표현하기에 하나 줄여서 학생수 만큼만 반복하겠다는 의미입니다.
그런데 10번줄의 i
값이 0에서 시작하므로,
우리는 학생에 대한 줄만 다루기 위하여 11번 줄에서 학생 정보의 시작줄인 1번째 리스트부터 작업을 하기 위해서 i
값을 하나 증가합니다.
12번째 줄에서는 각각의 학생 정보를 갖는 리스트의 마지막에 신규 두과목에 대한 성적을 공란으로 추가하는 작업입니다.
신규 과목의 성적을 리스트로 표현했으니, 기존 학생의 성적 리스트에 병합하기 위해서 extend()
함수를 사용한 것입니다.
13 print("[After]")
14 print(fileMatrix)
제대로 신규 두과목의 이름과 각 학생별 성적을 추가했는지를 화면에 출력해 봅니다.
15 with open('Step_13_SampleFile_newScore.csv', 'w') as fileWrite:
마지막으로 제대로 만들어진 새로운 성적 테이블을 Step_13_SampleFile_newScore.csv
라는 이름의 파일로 저장합니다.
저장 용도의 open() 함수
옵션인 'w'
를 주어서, 기존에 동일 이름의 파일이 있다면, 내용을 모두 없애고, 새롭게 파일을 열게 됩니다.
그리고 프로그램 속에서 이 파일을 다루는 파일 Class 객체인 fileWrite
를 만듭니다.
16 myWriter = csv.writer(fileWrite)
이 부분이 우리가 csv 모듈
을 import
한 이유입니다.
다시 5번째 줄의 작업을 역순으로 하려니 귀찮아 진겁니다.
따라서 이미 csv 파일 형태로 리스트를 자동으로 저장하는 기능을 사용하기로 했는데, 이 함수가 csv 모듈
내의 writer() 함수
입니다.
csv
형태의 파일로 주어진 파일을 취급하겠다는 의미의 문장으로서, 이제 우리는 fileWrite 객체
대신 csv 모듈
이 대신 작업해 주는 myWriter
를 만듭니다.
17 for i in range(lenFileMatrix):
이 문장은 단순히 결과 테이블의 리스트(줄) 갯수 만큼 반복을 수행하기 위한 반복문 입니다.
18 myWriter.writerow(fileMatrix[i])
단순하지만, 편리한 줄입니다. 이제 결과값을 가지는 List in Lists
형태의 fileMatrix
에서 한줄 한줄씩을 csv
형태의 파일로 저장합니다.
따라서, 자동으로 리스트의 정보들 사이에 ","
점을 넣고, 문자열로 변환하여, csv
파일에 저장하는 역항을 해줍니다.
이제 프로그램은 종료되었습니다.
with
문법을 사용하였기에, 별도의 파일을 닫는 목적의 close() 함수
호출은 없습니다.
이제 프로그램에 대한 이해도 마쳤으니, 실제로 프로그램을 아래의 입력창에 입력하고 실행해 봅니다.
csv
파일들이 제대로 만들어 졌는지도, 파일을 열어서 확인해 봅니다.
import csv
fileMatrix = []
with open('Step_13_SampleFile_score.csv', 'r') as fileRead:
for lineContent in fileRead:
fileMatrix.append(lineContent.strip('\n').split(','))
print("[Before]")
print(fileMatrix)
fileMatrix[0].extend(["HTML5", "CSS3"])
lenFileMatrix = len(fileMatrix)
for i in range(lenFileMatrix - 1):
i = i + 1
fileMatrix[i].extend(["_", "_"])
print("[After]")
print(fileMatrix)
with open('Step_13_SampleFile_newScore.csv', 'w') as fileWrite:
myWriter = csv.writer(fileWrite)
for i in range(lenFileMatrix):
myWriter.writerow(fileMatrix[i])
[Before] [['ID', 'Python', 'C++', 'Javascript', 'Go'], ['20190001', 'A', 'A', 'A', 'A'], ['20190002', 'A', 'B', 'A', 'C'], ['20190003', 'C', 'B', 'C', 'A'], ['20190004', 'B', 'B', 'B', 'B'], ['20190004', 'B', 'B', 'B', 'B']] [After] [['ID', 'Python', 'C++', 'Javascript', 'Go', 'HTML5', 'CSS3'], ['20190001', 'A', 'A', 'A', 'A', '_', '_'], ['20190002', 'A', 'B', 'A', 'C', '_', '_'], ['20190003', 'C', 'B', 'C', 'A', '_', '_'], ['20190004', 'B', 'B', 'B', 'B', '_', '_'], ['20190004', 'B', 'B', 'B', 'B', '_', '_']]
다음의 요구 사항에 맞는 프로그램을 개발하여 아래의 입력창을 통해서 실행합니다.
(a) 본 자료와 함께 배포한 Step_13_SampleFile_lab.csv 파일
을 읽기 전용 모드로 엽니다.
(b) 파일의 모든 내용을 read() 함수
로 읽습니다.
(c) 파일의 내용을 화면에 출력합니다.
(d) 파일을 닫습니다.
with open('Step_13_SampleFile_newScore.csv', 'r') as fileWrite:
temp = fileWrite.read()
print(temp)
ID,Python,C++,Javascript,Go,HTML5,CSS3 20190001,A,A,A,A,_,_ 20190002,A,B,A,C,_,_ 20190003,C,B,C,A,_,_ 20190004,B,B,B,B,_,_ 20190004,B,B,B,B,_,_
다음의 요구 사항에 맞는 프로그램을 개발하여 아래의 입력창을 통해서 실행합니다.
(a) 본 자료와 함께 배포한 Step_13_SampleFile_lab.csv 파일
을 읽기 전용 모드로 엽니다.
(b) 파일의 모든 내용을 readlines() 함수
로 읽습니다.
(주의: readline()
이 아님, readlines()
는 파일의 한줄을 문자열로 갖는 리스트를 만듬)
(c) 파일의 내용을 한줄씩 화면에 출력합니다. 이때 각각의 줄에서 줄바꿈 기호("\n"
)를 제거하고 출력합니다.
(주의: for
반복문과 strip() 함수
를 쓰면 됨)
(d) 파일을 닫습니다.
file = open("Step_13_SampleFile_lab.csv",'r')
contents = file.readlines()
for line in contents:
print(line.strip('\n'))
file.close()
ID,Python,C++,Javascript,Go 20190001,A,A,A,A 20190002,A,B,A,C 20190003,C,B,C,A
Step_14_Data_Collection_Types (0) | 2021.06.07 |
---|---|
Step_12_Loop_Part_2 (0) | 2021.06.02 |
Step_11_Loop_Part_1 (0) | 2021.05.30 |
Step_10_List (0) | 2021.05.28 |
Step_09_Method_and_Class (0) | 2021.05.26 |
댓글 영역