8. 파일 입력 출력

 

8.1 파일 함수와 옵션

 

파일 오픈 함수는 생각보다 많은 매개변수가 있습니다.

open(filename, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

파일을 오픈 하기 위해 주로 사용하는 것은

- filename은 필수로 입력 합니다.

- mode r(읽기), w(쓰기), a(추가하기) 중 하나를 기입하고

- t(텍스트) b(바이너리)도 입력해야 하는데 생략시 t default로 설정됩니다.

- encoding은 생략시 utf-8로 설정 됩니다.

- 나머지는 필요에 따라 선택적으로 적용 합니다.

 

모드는 여러 가지의 조합으로 사용 됩니다.

모드

의미

r

읽기파일을 읽기 위해 오픈 (default). 파일 없으면 오류

w

쓰기파일을 쓰기모드로 오픈. 파일 없으면 생성, 있으면 삭제 생성

x

open for exclusive creation, failing if the file already exists

a

쓰기끝에 추가, 없으면 생성

b

이진 모드

t

텍스트 모드 (default)

+

업데이트용 파일 오픈 (읽기, 쓰기 가능)

 r+

읽기 또는 쓰기, 파일 없으면 오류. 파일 있으면 처음에 추가

 w+

읽기 또는 쓰기, 파일 없으면 생성. 파일 있으면 삭제 후 생성

 a+

읽기 또는 추가, 파일 없으면 생성. 파일 있으면 끝에 추가


python study

 


8.2 파일 생성 및 쓰기

 

f = open(“file_name”, ‘w’)

파일을 쓰기모드(w)로 열면 파일이 존재하지 않는 경우 새로 생성이 되지만 기존에 파일이 존재하는 경우 기존 파일 내용을 삭제하고 새로 쓰기를 하게 됩니다.

 

8.2.1 write() 함수

 

write(data) 함수는 data를 파일에 모두 출력 합니다. 

sum = 0

f = open("F:/Python/file_write01.txt", 'w')

for i in range(1,101):

           sum += i

           tmp_data = "sum( %d ) = %d + %d\n"  % (sum , sum, i)

           f.write(tmp_data)

 

print(sum)

f.close()

(base) F:\Python>python file_w01.py

5050

sum( 1 ) = 1 + 1

sum( 3 ) = 3 + 2

sum( 6 ) = 6 + 3

sum( 10 ) = 10 + 4

sum( 15 ) = 15 + 5

sum( 21 ) = 21 + 6

sum( 28 ) = 28 + 7

sum( 36 ) = 36 + 8

sum( 45 ) = 45 + 9

....(생략)

 

list를 파일로 출력하려면 문자열로 변환하여 출력 하여야 합니다.

list_data = ['aaaa', 'bbbb','cccc']

f = open("F:/Python/file_write02.txt", 'w')

 

f.write('\n'.join(list_data))

 

f.close()

(base) F:\Python>python file_w02.py

aaaa

bbbb

cccc

 

 

8.2.2 writelines() 함수

 

writelines 함수를 이용하면 리스트 형태의 자료를 파일로 출력 가능 합니다.  단점은 모두 한줄로 결합되어 출력이 됩니다.

list_data = ['aaaa', 'bbbb','cccc']

f = open("F:/Python/file_write03.txt", 'w')

 

f.writelines(list_data)

 

f.close()

(base) F:\Python>python file_w03.py

aaaabbbbcccc

 

 

8.3 파일 읽기

 

파일을 읽기 모드(r)로 오픈 하는 경우 파일이 존재 하지 않으면 오류가 발생 하므로 try ... except를 사용하여 오류 처리를 하거나 존재 유무를 확인 하고 읽기 모드로 오픈 합니다.

 

8.3.1 read() 함수

 

read(size)의 형태로 사용되면 size를 생략하면 파일을 하나의 문자열로 리턴 합니다.  문제는 파일의 크기가 가용 메모리 범위를 넘어가면 안되기 때문에 size가 큰 파일은 나누어서 읽기를 추천 합니다.  파일의 끝에 도달하면 빈 문자열(‘’)을 리턴 합니다.

try:

   f = open("F:/Python/file_write01.txt", 'r')

 

   data = f.read()

   print(data)

 

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

전체 읽기

(base) F:\Python>python file_r01.py

sum( 1 ) = 1 + 1

sum( 3 ) = 3 + 2

sum( 6 ) = 6 + 3

sum( 10 ) = 10 + 4

sum( 15 ) = 15 + 5

sum( 21 ) = 21 + 6

...(생략)

 

read(size)를 이용하여 파일 읽기. size 만큼 읽어와 출력 합니다.

try:

   f = open("F:/Python/file_write01.txt", 'r')

 

   data = f.read(100)

   print(data)

 

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

100 byte 읽기

(base) F:\Python>python file_r02.py

sum( 1 ) = 1 + 1

sum( 3 ) = 3 + 2

sum( 6 ) = 6 + 3

sum( 10 ) = 10 + 4

sum( 15 ) = 15 + 5

sum( 21 ) =

 

 

8.3.2 readline() 함수

 

열린 파일을 한 라인씩 읽어오는 함수 입니다.  한 라인씩 읽어 오는 동안 계속 해서 읽어올 라인이 없는지 확인 하고 없으면 break로 종료 합니다.

try:

   f = open("F:/Python/file_write01.txt", 'r')

 

   data = f.readline()

   print(data)

 

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

한라인만 읽어와 출력 합니다.

(base) F:\Python>python file_r03.py

sum( 1 ) = 1 + 1

 

 

8.3.3 readlines() 함수

 

파일을 한꺼번에 읽어서 각 라인을 리스트 형태로 반환하는 함수 입니다.

try:

   f = open("F:/Python/file_write01.txt", 'r')

 

   data_list = f.readlines()

   data_length = len(data_list)

   print("list count : " + str(data_length))

   print(data_list[0])

   print(data_list)

 

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

파일의 라인 수와 List의 첫 번째 요소, 전체 출력

(base) F:\Python>python file_r04.py

list count : 100

sum( 1 ) = 1 + 1

 

['sum( 1 ) = 1 + 1\n', 'sum( 3 ) = 3 + 2\n', 'sum( 6 ) = 6 + 3\n', ...(생략)...]



 

8.4 + 사용


개인적으로는 ‘+’를 붙여 사용 하는 것보다 원래의 기능대로 사용하길 추천 합니다.

 

8.4.1 r+


mode‘r+’를 사용하면 읽기와 쓰기가 가능 합니다파일이 존재하지 않으면 오류를 발생 하고특별히 위치를 정하지 않는다면 파일의 처음에 추가가 됩니다.

try:

   f = open("F:/Python/file_write02.txt", 'r+')

 

   f.write("kkk")

  

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

# 실행 전 파일 file_write02.txt

aaaa

bbbb

cccc

# 실행 후 파일 file_write02.txt

kkka

bbbb

cccc

 

 

8.4.2 w+


mode‘w+’를 사용하면 읽기와 쓰기가 가능 합니다파일이 없으면 생성 하고 파일이 존재 하면 내용을 삭제하고 쓰기를 진행 합니다.

try:

   f = open("F:/Python/file_write02.txt", 'w+')

 

   f.write("kkk")

  

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

# 실행 전 파일 file_write02.txt

aaaa

bbbb

cccc

# 실행 후 파일 file_write02.txt

kkk

 

 

8.4.3 a+


mode‘a+’를 사용하면 읽기와 쓰기가 가능 합니다파일이 없으면 오류가 발성 하고 파일이 존재 하면 내용의 끝에 쓰기를 진행 합니다.

try:

   f = open("F:/Python/file_write02.txt", "a+")

  

   f.write("kkk")

  

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

# 실행 전 파일 file_write02.txt

aaaa

bbbb

cccc

# 실행 후 파일 file_write02.txt

aaaa

bbbb

cccckkk


- copy coding -


+ Recent posts