recordingbetter's devlog

Python, Django, DRF, Postgresql, AWS, Docker....

Python 파일 입출력

24 May 2017


  • 프로그램 실행 중에 파일에 데이터를 저장하거나, 파일의 데이터를 불러오는 작업

파일 열기 open()

  • 내장함수 open을 사용하고, 파일명에 파일 경로를 적어준다.
  • 파일을 열고나면 꼭 닫아야 한다. 닫지 않으면 계속 메모리에 남아있음…
변수 = open(파일명, 모드)

모드

  • 2개의 문자로 표시한다.

모드의 첫번째 문자

모드 설명
r 읽기
w 쓰기 - 이미 파일이 존재한다면 덮어쓴다.
x 쓰기 - 이미 파일이 존재한다면 에러 발생
a 추가 - 이미 파일이 존재할 경우 기존 데이터 뒤에 추가한다. 파일이 없을 경우 만든다.

모드의 두번째 문자

모드 설명
t 텍스트 타입. 생략 가능하다.
b 이진데이터. 텍스트가 아닌 모든 타입

파일 쓰기 write()

  • 파일에 데이터를 쓴다.
# skills.txt 파일을 쓰기모드로 열고,
f = open('skills.txt', 'wt')

# skills 변수에 저장된 데이터를 skills.txt 파일에 쓴다.
f.write(skills)

# skills.txt 파일을 닫는다.
f.close()

써야하는 문자열이 큰 경우, 일정 단위로 나누어 파일에 쓴다.


skills = '''
Illumination
Light Binding
Prismatic Barrier
Lucent Singularity
Final Spark
Illumination
Light Binding
Prismatic Barrier
Lucent Singularity
Final Spark
Illumination
Light Binding
Prismatic Barrier
Lucent Singularity
Final Spark
Illumination
Light Binding
Prismatic Barrier
Lucent Singularity
Final Spark
Illumination
'''

f = open('skills.txt', 'wt')
size = len(skills)
offset = 0
chunk = 5

# 5글자씩 파일에 쓴다.
while True:
	if offset > size:
		break
	f.write(skills[offset:offset+chunk])
	offset += chunk

텍스트파일 전체 읽기 read()

  • 파일 전체를 한번에 읽어온다.
  • 메모리 사용에 유의해야한다.
f = open('skills.txt', 'rt')
skills = f.read()
f.close()
len(skills)

한번에 읽을 최대 문자 수를 제한할 수 있다.

f = open('skills.txt, 'rt')
chunk = 30

# 30글자씩 읽어 skills 변수에 추가한다.
while True:
	part = f.read(chunk)
	
	# 파일을 전부 읽고나면 빈 문자열이 리턴되어 if에서 반복을 중단한다.
	if not part:
		break
	skills += part

f.close()
빈 라인 \n은 길이가 1이다.

이터레이터를 사용한 텍스트파일 읽기

  • readline()과 같은 결과
skills = ''
f = open('skills.txt', 'rt')

for line in f:
	skills += line
	
f.close()
print(skills)

텍스트파일을 줄단위 문자열 리스트로 리턴 readline()

  • 각 줄에 줄바꿈 문자 \nend=''으로 없앨 수 있다.
f = open('skills.txt', 'rt')
lines = f.readlines()
f.close()
for line in lines:
    print(line, end='')

자동으로 파일 닫기 with

  • 파이썬에서는 해당 파일이 더이상 사용되지 않을때 파일을 자동으로 닫아준다.
  • 하지만 메인프로그램이나 오랫동안 동작하는 함수에서 파일을 열고 닫지 않을 경우 문제가 발생한다.
  • with를 사용하여 내부 구문이 종료되면 파일을 자동으로 파일을 닫아준다
with open('skills.txt', 'wt') as f:
	f.write(skills)
blog comments powered by Disqus