프로그래밍 언어/Python

Python 표준 라이브러리 (파일 -file-)

dpswlsldj 2021. 3. 1. 08:56
728x90

파일의 입출력을 위해서는 별도의 모듈을 import하지 않아도 Python 표준 내장 라이브러리를 사용할 수 있습니다.

 

fp = open(파일명, 모드, 인코딩) 함수를 통해 file을 열고 파일 포인터를 얻어올 수 있습니다.

 

모드는 아래 세 가지가 있습니다.

모드
r read
읽기모드
w write
쓰기모드
a append
추가모드

 

파일 포인터가 지원하는 함수는 아래와 같습니다.

함수명 사용법 (fp = open(...)한 경우)
write 파일에 내용을 작성 fp.write('abc')
read 파일의 내용을 읽어옴 a = fp.read()
readline    
readlines    
seek x번째 위치로 포인터를 옮김 fp.seek(5)
tell 현재 포인터의 위치를 알려줌 fp.tell()
close 파일 포인터를 닫음 fp.close()

 

아래와 같이 사용할 수 있습니다.

fpw = open("text.txt", "w") #write mode로 file open
print(fpw.tell())           #현재 포인터 위치 0
fpw.write("Hello World")
print(fpw.tell())           #현재 포인터 위치 11
print(fpw.seek(5))          #포인터 위치를 5로 옮김
print(fpw.tell())           #현재 포인터 위치 5
fpw.write("modified")       #Hellomodified 로 내용이 변경됨
fpw.close()                 #포인터 close

fpr = open("text.txt", "r")
a = fpr.read()
print(a)
fpr.close()

fpa = open("text.txt", "a") #append mode로 file open
print(fpa.tell())           #현재 포인터 위치 13
fpa.write("\nGood night")   #Hellomodified\nGood night 로 내용이 변경됨
print(fpa.tell())           #현재 포인터 ㅜ
fpa.close()

fpr = open("text.txt", "r")
a = fpr.read()
b = fpr.read(5) #위에서 파일을 통째로 다 읽어갔기 때문에 그 뒤로는 빈 내용만 읽어옴
print(a)
print(b)
fpr.close()

fpr2 = open("text.txt", "r")
c = fpr2.read(5) #5byte만 읽어옴
print(c) #Hello 만 찍힘
fpr2.close()

 

read() 함수는 파일의 내용을 통째로 읽어옵니다.

 

이를 한 줄씩 읽기 위해서는 아래와 같이 사용할 수 있습니다.

fpw = open("text.txt", "w")
fpw.write("Hello World\nHello World2\nHello World3")
fpw.close()

fpr = open("text.txt", "r")
a = fpr.readline() #한 줄만 읽어옵니다.
print(a)
b = fpr.readline() #b에서 읽어온 다음 줄을 읽어옵니다.
print(b)
fpr.close()

fpr2 = open("text.txt", "r")
c = fpr2.readlines() #파일의 모든 내용을 읽어서 list를 구성합니다.
print(c)
print(c[1])
fpr.close()

fpr3 = open("text.txt", "r")
for line in fpr3: #read하지 않고 포인터를 그대로 사용
    print(line)
fpr3.close()

 

한 글자씩 읽어오기 위한 방법은 아래와 같습니다.

fpw = open("text.txt", "w")
fpw.write("Hello World\nHello World2\nHello World3")
fpw.close()

fpr = open("text.txt", "r")
a = fpr.read()
for character in a:
    print(character)
fpr.close()