[Python]

파이썬 - 파일 입출력

AI gina 2022. 5. 23. 18:07

파일에 문자열 읽기, 쓰기

import os
#현재 디렉토리 확인
print(os.getcwd())

#경로이동 가능 
cd c:\\ai\\pythonstudy


파일에 문자열 쓰기 
    1. 파일에 문자열을 쓸 때는 open 함수를 이용해서 파일객체를 얻어온다.
    2. 얻어온 파일 객체에 write 메소드를 이용해서 문자열을 쓴다. 
    3. 모든 일이 끝나면 반드시 close 메소드를 이용해서 파일객체를 닫는다. 

f = open('myFile.txt', 'w')           # (1)'myFile.txt' 파일 쓰기 모드로 열기
f.write('This is my first file.')     # (2) 연 파일에 문자열 쓰기
f.close()                             # (3) 파일 닫기

 

+ 파일 읽기
파일에 문자열을 쓸 때는 open 함수를 이용해서 파일객체를 얻어온다.
얻어온 파일 객체에 read 메소드를 이용해서 문자열을 쓴다.
모든 일이 끝나면 반드시 close 메소드를 이용해서 파일객체를 닫는다.

f = open('myFile.txt','r')
text = f.read()
f.close()

print(text)
This is my first file.

 

+ 반복문을 이용해 파일 읽고 쓰기
- 파일에 문자열 한 줄씩 쓰기

f = open('gugudan_2.txt', 'w')
for num in range(1,10):
    f.write(f'2 X {num} = {2*num}\n')
f.close()
!type gugudan_2.txt

 

2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18

 

+ 리스트에 들어있는 문자열 파일에 쓰기
파일객체.writelines(문자열리스트)

lines = ['hi!!!', 'python!!!', 'Django', 'Html', 'CSS']

f = open('lineTest.txt','w')
f.writelines(lines)
f.close()

 

+ 파일에서 문자열 한 줄씩 읽기

readline()


+ 파일의 내용을 한 줄씩 리스트로 가져오기.
 readlines()

f = open('gugudan_2.txt','r')
gg_list = f.readlines()
f.close()
gg_list
['2 X 1 = 2\n',
 '2 X 2 = 4\n',
 '2 X 3 = 6\n',
 '2 X 4 = 8\n',
 '2 X 5 = 10\n',
 '2 X 6 = 12\n',
 '2 X 7 = 14\n',
 '2 X 8 = 16\n',
 '2 X 9 = 18\n']

+ 자동으로 file 객체를 닫아주는 with
- with 문의 구조
  ```

  with open(파일이름, 파일모드) as 파일객체:
    코드

   ```

with open('hi.txt','w') as f:
    f.write('hi!!!! 1')
    f.write('hi!!!! 2')
    f.write('hi!!!! 3')
    f.write('hi!!!! 4')

 

+ 객체를 파일에 저장하는 pickle 모듈
  - 파이썬 객체를 파일에 저장하는 과정피클링(pickling)이라고 한다.
  - 파일에서 객체를 읽어오는 과정을 언피클링(unpickling)이라고 한다. 

 

+ 파이썬 객체를 파일에 저장하기
  pickle 모듈dump 메서드를 사용한다

import pickle

name = 'kang'
phone = '010-1111-2222'
address = '경기도 고양시'

with open('kang.txt','wb') as f:
    pickle.dump(name, f)
    pickle.dump(phone, f)
    pickle.dump(address, f)
!type kang.txt

 

+ 파일에서 파이썬객체 읽기
  pickle 모듈load를 사용한다.

with open('kang.txt','rb') as f:
    name = pickle.load(f)
    phone = pickle.load(f)

print(name,phone)
kang 010-1111-2222

 

파일 모드 종류

r - 읽기모드 (디폴트)

w - 쓰기모드, 파일이 있으면 모든 내용을 삭제

x - 쓰기모드, 파일이 있으면 오류 발생

a - 쓰기모드, 파일이 있으면 뒤에 내용을 추가

+ - 읽기쓰기모드

t - 텍스트 모드, 텍스트 문자 기록에 사용 (디폴트)

b - 바이너리 모드, 바이트단위 데이터 기록에 사용

![파일모드](027004.png)