파이썬 파일 다루기
1. open method
- open method를 배우는 이유 : 나중에 모든 data file 및 module을 file로써 제공. 따라서 기본적으로 파일을 읽고 쓸 줄 알아야함.
- f=open() <= 객체 생성 f.close()가 없다면 삭제, 옮김, 수정등이 안 됨..
1.open
- open("파일명, '모드') : 파일 객체를 사용하게 위해 연다.
- close(): 파일을 닫는다. => 반드시 닫아줘야 나중에 다음과 같은 에러가 안 뜸.

- 파일 쓰기 / 파일객체 옵션
r : read(읽기)
w : write(쓰기)
a : append(추가 쓰기)
write() : 해당 파일 내용을 쓴다.
- 문법
filename = "./data/test.txt"
# 쓰기위해서 파일 객체를 연다.
f = open(filename,'w')
# 파일에 내용을 쓴다.
f.write("Hello\nHow r u\ni'm under tha wartha")
# 파일을 닫는다.
f.close()
2. read함수
- 가장 중요함 : 파일에 들어있는 인코딩 방식이나 이런것들이 다 다르기 때문이다.
1) readline() : 파일에서 한줄을 읽는다 (첫 줄만 필요할 때 사용)
#파일 한 줄씩 읽기
filename = "./data/test1.txt"
# 파일객체를 읽기위해 연다.
f = open(filename, 'r')
# 첫 줄만 읽기
line = f.readline()
print(line)
# 항상 닫아주기!!
f.close()
#result
## Hello
- while 문 + readline() 함수로 read()와 비슷한 성능 내기.
# readline() 함수를 이용하여 전체 줄 읽기
f = open(filename, 'r')
while(True):
line = f.readline()
# 읽을 줄이 없다면 반복문 중지
if not line:
break
print(line, end = "")
f.close()
2) readlines() : 파일을 한줄씩 읽어서 리스트에 저장하여 반환 (데이터 분석을 위해 사용)
f= open(filename,'r')
lines = f.readlines()
for line in lines:
print(line, end='')
f.close()
- 왜? end='' 인가?
- readlines() 의 특징 : 한 행마다 전부 배열에 저장한다.
- 이 배열을 기반으로 데이터 분석, text-mining을 진행할 수 있다.
# 여러줄 읽기
f = open(filename, 'r')
# 여러 줄을 읽어서 한줄씩 list에 저장.
lines = f.readlines()
lines
f.close()
- 왜? end='' 인가?
['Hello\n', '우리는 spring반입니다.'] 처럼 \n의 개행문자가 자동으로 들어있기 때문이다.
3) read() : 전체 파일을 읽는다.
f= open(filename,'r')
data = f.read()
print(data,end="")
f.close()
# 전체 파일 내용 한번에 읽기
f=open(filename,'r')
data = f.read()
print(data, end='')
f.close()
- read()함수는 문자열로 반환!!
보통 변수를 하나 선언해서 거기에 객체.함수를 집어 넣는다.
3. append 모드
# 파일 내용을 추가하기(쓰기) 위해 연다.
f=open(filename,'a')
# for문을 돌면서 10번 추가하겠다.
for i in range(1,10):
f.write(f"\nSpring반 {i}번 파이팅!")
f.close()
- 만일 계속 실행해서 계속 추가한다면 계속 추가됨.
4. with as
- close()를 깜빡하고 쓰지 않아도 파일 객체를 닫을 수 있다.
with open(filename,'r') as f:
data = f.read()
print(data)
- with 함수를 쓰고 나서 파일객체를 불러오면 error가 발생한다.

2. os. method
1. os.path.exist()
import os.path
filename = "./data/test1.txt"
# 해당 파일이 있다면:
if os.path.exists(filename):
# 덮어쓰지 않고 출력을 하겠다.
print("동일한 파일명이 있습니다.")
else:
f = open(filename,'w')
f.write("Hello\n우리는 spring반입니다.")
f.close()
2. os.listdir
- 폴더 내의 폴더와 파일 목록을 반환(list directory의 준말)
- 문법
import os
path = "C:/Users/AI_school/anaconda3/envs/data"
# 해당 폴더의 파일들을 리스트로 반환
filenames = os.listdir(path)
print(filenames)
# 폴더명까지 출력
for filename in filenames:
# join : 문자열 연결함수 (파일, 경로연결)
full_path = os.path.join(path, filename)
print(full_path)
- 경로 설정 시 주의사항 unicode error가 뜰 수 있음 이땐
/, \, \\ 요거 3개 다 돌려가면서 해봐야함.

3. os.remove
- 해당 파일을 삭제
- 이때 무지성으로 삭제하기 보단 앞서 배운 os.path.exist 함수와 함게 존재한다면 삭제하는 함수를 만들면 좋다.
import os
filename = "C:/Users/AI_school/anaconda3/envs/data/test1.txt"
# 해당 파일이 있는지 확인
if os.path.exists(filename):
os.remove(filename)
else:
# 파일이 없는 경우에는 에러를 발생
print("해당 파일이 없습니다.")
# os.remove(path)
4. os.mkdir
- 해당 폴더를 생성(make directory의 준말)
path = "C:/Users/AI_school/anaconda3/envs/data/test777"
if not os.path.exists(path):
os.mkdir(path)
else:
print("해당 폴더가 존재합니다.")
- os.path.exist 함수를 통해 폴더가 없다면 만들겠다는 코드로 짜보았다. 왜냐면 안그러면 error나 중복이 되어버리기때문이다.
5. os.rmdir
- 해당 폴더를 삭제(remove directory의 준말)
# 만약 폴더가 있다면
path = "C:/Users/AI_school/anaconda3/envs/data/test777"
if os.path.exists(path):
os.rmdir(path)
else:
print("해당 폴더가 없습니다.")
추가공부
- 자바관련 파일시스템은 조금 복잡함. (추후 추가 공부 필요.)
- os.path에 무슨무슨 함수들이 붙어있는지 공부할 것