파이썬에서 파일을 읽거나, 쓰거나, 고칠 땐 먼저 open() 함수로 파일을 열고, 작업이 끝났으면 close() 함수로 파일을 닫아 주어야 한다.

 

1. 파일 읽기

기본적인 코드는 다음과 같다.

f=open('mydata.txt','r')
lines=f.readlines()
for line in lines:
	print(line)
f.close()

open() 함수의 첫번째 인자는 파일 이름이고, 두번째 인자는 파일 모드이다. 'r'은 읽기, 'w'는 쓰기, 'a'는 추가하기이다.

메모장을 열어 여러 줄로 된 텍스트 파일을 하나 만들어서 mydata.txt라는 이름으로 저장하고 위의 코드를 실행해 보면 다음과 같이 나타난다.

 

안녕하세요.

주재욱입니다.

그럼 안녕히 계세요.

저게 보기 싫지 않으면 상관없는데, 한줄씩 띄어서 출력되는 게 싫은 사람도 있을 것이다. 여러 줄로 된 텍스트 파일을 읽으면 각 줄 끝에 줄바꿈 문자('\n')가 같이 변수에 저장되는데 파이썬의 print() 함수는 줄바꿈 문자가 있건 없건 알아서 줄을 바꿔주기 때문에 줄바꿈이 두 번 일어나서 그렇다. print() 함수에게는 줄바꿈을 못하게 하는 옵션이 없기 때문에 각 문자열 끝에 있는 줄바꿈 문자를 없애 줘야 하는데 strip() 함수를 쓰면 된다. strip() 함수는 문자열 양 끝에 줄바꿈 문자나 공백을 없애 주는 함수이다.

f=open('mydata.txt','r')
lines=f.readlines()
for line in lines:
	print(line.strip())
f.close()

실행시키면 한줄씩 띄어서 출력되던 것이 줄이 붙어서 출력되는 걸 알 수 있다.

안녕하세요.
주재욱입니다.
그럼 안녕히 계세요.

2. 파일 쓰기

오픈 함수의 두번째 인자인 모드를 'w'로 바꾸면 파일 쓰기가 가능해진다. 파일에 텍스트를 쓸 때는 write() 함수를 쓴다.

f=open('mydata.txt','w')
f.write('안녕하세요.\n')
f.write('homy입니다.\n')
f.write('히히, 재밌다.\n')
f.close()

3. with-as 문

with-as문을 쓰면 파일을 열어서 작업을 하고 파일을 닫을 때까지의 과정을 블럭화한다. 블럭을 빠져 나오면 파일은 자동으로 닫히기 때문에 close()문을 따로 쓸 필요가 없다.

with open('mydata.txt','w') as f:
	f.write("안녕하세요. homy입니다.\n");
	f.write("with-as 문을 테스트하고 있습니다.\n");

4. 파일의 특정 열을 삭제하기

파일 전체를 읽어들인 뒤, 열을 뺀 나머지를 새 파일에 다시 쓰는 방식으로 삭제한다. 이를테면 10번째 행을 삭제하고 싶다면 다음과 같이 하면 된다.

with open('mytext.txt','r') as f:
	text=f.readlines()
i=0
with open('mytext.txt','w') as f:
	i=i+1
	for line in text:
		if i!=10: f.write(line)

5. csv 파일 읽고 쓰기

통계 데이터로 많이 쓰이는 csv 파일은 컬럼이 콤마(,)로 구분되어 있다. 문자열을 처리하는 함수를 이용하면 직접 만들 수도 있겠지만 csv 모듈을 쓰면 편하게 불러서 쓸 수 있다.

import csv
with open('mydata.csv','r') as f:
	rdr=csv.reader(f)
	for line in rdr:
		print(line)

csv 모듈의 reader() 함수를 써서 csv 파일을 불렀고 데이터는 rdr이란 변수에 저장되었다. rdr은 _csv.reader라는 타입의 변수인데 리스트 변수는 아니지만 for 문을 사용해 각 행을 읽어 들이는 것이 가능하다. 여기서 line이란 변수는 데이터의 각 행에 해당하는데 리스트 변수이고, 각 열이 요소로 저장되어 있다. print 함수를 써서 보면 리스트 형태로 출력을 한다.

파일을 쓸 때는 writerow() 함수를 쓴다. 열 단위로 쓰게 되어 있다.

import csv
with open('mydata.csv','w') as f:
	wr=csv.writer(f)
	wr.writerow([1,2,3,4])
	wr.writeriw([5,6,7,8])

6. csv 파일 sort 하기

csv 파일은 변수 하나를 기준으로 정렬이 가능하다. operator 모듈의 itemgetter() 함수를 써서 변수를 불러들인다. 이를테면 세번째 변수를 기준으로 정렬을 하고 싶으면 다음과 같이 하면 된다.

import csv
import operator
with open('andy.csv','r') as f:
	rdr=csv.reader(f)
	sort=sorted(rdr,key=operator.itemgetter(2))
	for line in sort:
		print(line)

itemgetter(2)가 세번째 변수를 정렬 기준인 key로 사용하겠다는 뜻이다. 파이썬은 0부터 세니까 첫번째 변수는 itemgetter(0)이고 세번째 변수는 itemgetter(2)이다. lambda를 쓰면 좀 더 세련되게 쓸 수 있다.

import csv
import operator
with open('andy.csv','r') as f:
	rdr=csv.reader(f)
	sort=sorted(rdr,key=lambda x:x[2])
	for line in sort:
		print(line)

위에 것과 완전히 같은 결과를 얻을 수 있다.

Posted by jujaeuk
,