블로그 이미지
김고노

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

2018. 4. 2. 18:16 파이썬 복습

파일을 통한 입출력 방법에 대해서 알아보자.



먼저 파일을 새로 만든 다음


프로그램에 의해서 만들어진 결과값을 새 파일에 한번 적어 보고,


또 파일에 적은 내용을 읽어 보는 프로그램을 만들자.




파일 생성하기



f = open("새파일.txt", 'w')

f.close()



위 소스 코드를 에디터로 작성해서 아무데나 저장후,


실행-cmd 를 입력해 도스창으로 간후 파이썬 디렉토리로 가서


저장한 이름.py 로 실행해보자.


그러면 프로그램을 실행한 디렉토리에 새로운 파일이 하나 생성 될 것이다. 


이름하야 새파일.txt


→인코딩이 ANSI 로 되있던데 이거하면 못읽음

   오류나서 UTF-8 로 했음



파일을 생성하려고 open 이라는 파이썬 내장 함수를 사용했다.


파일 객체 = open(파일 이름, 파일 열기 모드)



open 함수는 '파일 이름'과 '파일 열기 모드'를 입력값으로 받고


결과값으로 파일 객체를 돌려줌.




파일 열기 모드


r   →  읽기 모드 - 파일을 읽기만 할 때 사용


w  →  쓰기 모드 - 파일에 내용을 쓸 때 사용


a   →  추가 모드 - 파일의 마지막에 새로운 내용을 추가할 때 사용





위에 만들어본 것처럼 파일을 쓰기 모드로 열게 되면 만약 해당 파일이


이미 존재할 경우 원래 있던 내용이 모두 사라짐.


해당 파일이 존재하지 않으면 위처럼 새로운 파일이 생성됨. 



만약 C:/gibeom 이라는 디렉토리에 생성하고 싶다!면


f = open("C:/gibeom/새파일.txt", 'w')

f.close()


이렇게 하면 됨. 그럼 실행하면 지정된 디렉토리인 gibeom에 새파일.txt가 생성





★f.close()는 열려 있는 파일 객체를 닫아주는 역할.


생략해도 되긴 하는데 쓰는게 더 좋다고함.


왜냐하면 쓰기 모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면


오류가 발생한다고 함.




파일을 쓰기 모드로 열어 출력값 적기



위에는 열기만 하고 아무것도 안썼다.


이제 에디터를 열어서 프로그램의 출력값을 파일에 직접 써보자.



f = open("C:/python/새파일.txt", 'w')

for i in range(1, 11):

    data = "%d번째 줄입니당!!. \n" % i

    f.write(data)    ← data를 파일 객체 f에 써라

f.close()



그리고 실행을 해보자!.


c:/python 경로에 만들어진 새파일.txt를 열어보면


1번째 줄입니당!!.

2번째 줄입니당!!.

3번째 줄입니당!!.

4번째 줄입니당!!.

5번째 줄입니당!!.

6번째 줄입니당!!.

7번째 줄입니당!!.

8번째 줄입니당!!.

9번째 줄입니당!!.

10번째 줄입니당!!.


라고 나올 것이다.



\n해도 메모장엔 안나오네.  쓰기 말고 읽기 모드엔 나오던데


->\n 안하면 메모장에 1줄로나옴.






프로그램의 외부에 저장된 파일을 읽는 여러가지 방법



readline() 함수 이용하기



f = open("C:/python/새파일.txt", 'r')

line = f.readline()

print(line)

f.close()



위 예는 파일을 읽기 모드로 연 후 readline()을 이용하여


파일의 첫 번째 줄을 읽어 출력하는 경우.



1번째 줄입니다.



라고 새파일.txt를 수정하거나 지우지 않았으면 출력될 것이다.



readline()은 한줄씩 읽음




만약 모든 라인을 읽어서 화면에 출력하고 싶다면?


f = open("C:/python/새파일.txt", 'r')

while True:

    line = f.readline()

    if not line: break

    print(line)

f. close()



while True:라는 무한 루프 안에서 f.readline()을 이용해


파일을 계속해서 한줄씩 읽어 들이도록 함.


만약 더 이상 읽은 라인이 없으면 break 수행



★readline()은 더 이상 읽을 라인이 없을 경우 None을 출력





readlines() 함수 이용하기



f = open("C:/python/새파일.txt", 'r')

lines = f.readlines()

for line in lines:

    print(line)

f.close()



readlines() 함수는 → 파일의 모든 라인을 읽어서 각각의 줄을 요소로 갖는 리스트를 리턴


위의 예에서 lines는 ["1 번째 줄입니당!!.", , , "10 번째 줄입니당!!."]


라는 리스트가 됨.





read() 함수 이용하기


f = open("C:/python/새파일.txt",'r')

data = f.read()

print(data)

f.close()



f.read()는 파일의 내용 전체를 문자열로 리턴


위 예의  data는 파일의 전체 내용.


→ 이건 줄에 엔터가 적용이 안되있음 딱 붙어서 나옴





파일에 새로운 내용 추가하기




원래 있던 값을 유지하며 단지 새로운 값만 추가해야 할 경우


파일을 추가 모드('a')로 열면됨.



f = open("C:/python/새파일.txt", 'a')

for i in range(11,20):

    data = "%d번째 줄입니당!!. n" %i

    f.write(data)

f.close




확인해보면 10번째줄이후 11번째 줄부터 20번째 줄까지 내용이 추가됨.





with문과 함께 사용하기




f = open("foo.txt", 'w')

f.write("Life is too short, you need python")

f.close()



파일을 열면 위와같이 항상 close 해 주는 것이 좋음.


하지만 이렇게 파일을 열고 닫는 것을 자동으로 처리하면 얼마나 좋을까?


파이썬 with문이 이런 역할을 해줌.





with open("foo.txt", 'w') as f:

    f.wirte("Life is too short, you need python")


with문을 이용하면 with 블록을 벗어나는 순간


열린 파일 객체 f가 자동으로 close 됨.          → ??

'파이썬 복습' 카테고리의 다른 글

4/13 클래스 (1/4)  (0) 2018.04.13
4/3 연습문제  (0) 2018.04.03
3/31 사용자 입력과 출력  (0) 2018.03.31
3/30 함수(2/2)  (0) 2018.03.30
3/30 함수 (1/2)  (0) 2018.03.30
posted by 김고노