ko ko ko en en en ko ko cs zh ko ko ko ko ko ko ko ko ko en ko ko en ko ko ko ko en ko ru ko ko ko ko ko ar ko ko ko ko ko ko ko en ko ko ko ko ko ko ko ko ko ko en ko ko ko ko ko ko en ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko fr ko ko ko ko fr ko ko ko en en ko en zh en en
파이썬 코딩 도장: 27.2 문자열 여러 줄을 파일에 쓰기, 읽기
◀ 27.1 파일에 문자열 쓰기, 읽기27.3 파이썬 객체를 파일에 저장하기, 가져오기 ▶︎
이번에는 문자열 여러 줄을 파일에 쓰고 읽는 방법을 알아보겠습니다.
27.2.1  반복문으로 문자열 여러 줄을 파일에 쓰기
앞에서 문자열 한 줄을 파일에 썼는데 문자열 여러 줄은 어떻게 쓰면 될까요? 간단하게 반복문을 사용하면 됩니다.
with open('hello.txt', 'w') as file:    # hello.txt 파일을 쓰기 모드(w)로 열기     for i in range(3):         file.write('Hello, world! {0}\n'.format(i))
.py 파일이 있는 폴더의 hello.txt 파일을 열어보면 다음과 같은 내용이 저장되어 있습니다.
Hello, world! 0 Hello, world! 1 Hello, world! 2
파일에 문자열 여러 줄을 저장할 때 주의할 부분은 개행 문자 부분입니다. 'Hello, world! {0}\n'와 같이 문자열 끝에 개행 문자 \n를 지정해주어야 줄바꿈이 됩니다. 만약 \n을 붙이지 않으면 문자열이 모두 한 줄로 붙어서 저장되므로 주의해야 합니다.
27.2.2  리스트에 들어있는 문자열을 파일에 쓰기
이번에는 리스트에 들어있는 문자열을 파일에 써보겠습니다.
lines = ['안녕하세요.\n', '파이썬\n', '코딩 도장입니다.\n']   with open('hello.txt', 'w') as file:    # hello.txt 파일을 쓰기 모드(w)로 열기     file.writelines(lines)
writelines는 리스트에 들어있는 문자열을 파일에 씁니다. 특히 writelines를 사용할 때는 반드시 리스트의 각 문자열 끝에 개행 문자 \n을 붙여주어야 합니다. 그렇지 않으면 문자열이 모두 한 줄로 붙어서 저장되므로 주의해야 합니다.
27.2.3  파일의 내용을 한 줄씩 리스트로 가져오기
그럼 앞에서 만든 hello.txt 파일의 내용을 한 줄씩 읽어보겠습니다. read는 파일의 내용을 읽어서 문자열로 가져오지만 readlines는 파일의 내용을 한 줄씩 리스트 형태로 가져옵니다..
with open('hello.txt', 'r') as file:    # hello.txt 파일을 읽기 모드(r)로 열기     lines = file.readlines()     print(lines)
['안녕하세요.\n', '파이썬\n', '코딩 도장입니다.\n']
파일의 내용을 한 줄씩 리스트 형태로 가져왔습니다.
27.2.4  파일의 내용을 한 줄씩 읽기
만약 파일의 내용을 한 줄씩 순차적으로 읽으려면 readline을 사용합니다.
with open('hello.txt', 'r') as file:    # hello.txt 파일을 읽기 모드(r)로 열기     line = None    # 변수 line을 None으로 초기화     while line != '':         line = file.readline()         print(line.strip('\n'))    # 파일에서 읽어온 문자열에서 \n 삭제하여 출력
안녕하세요. 파이썬 코딩 도장입니다.
readline으로 파일을 읽을 때는 while 반복문을 활용해야 합니다. 왜냐하면 파일에 문자열이 몇 줄이나 있는지 모르기 때문입니다. while은 특정 조건이 만족할 때 계속 반복하므로 파일의 크기에 상관없이 문자열을 읽어올 수 있습니다.
readline은 더 이상 읽을 줄이 없을 때는 빈 문자열을 반환하는데, while에는 이런 특성을 이용하여 조건식을 만들어줍니다. 즉, line != ''와 같이 빈 문자열이 아닐 때 계속 반복하도록 만듭니다. 그리고 반복문 안에서는 line = file.readline()과 같이 문자열 한 줄을 읽어서 변수 line에 저장해주면 됩니다.
특히 변수 line은 while로 반복하기 전에 None으로 초기화해줍니다. 만약 변수 line을 만들지 않고 while을 실행하면 없는 변수와 빈 문자열 ''을 비교하게 되므로 에러가 발생합니다. 또는, line을 None이 아닌 ''로 초기화하면 처음부터 line != ''는 거짓이 되므로 반복을 하지 않고 코드가 그냥 끝나버립니다. while을 사용할 때는 이 부분을 주의해주세요.
line = None    # 변수 line을 None으로 초기화     while line != '':
문자열을 출력할 때는 print(line.strip('\n')와 같이 strip 메서드로 \n을 삭제했습니다. 왜냐하면 파일에서 읽어온 문자열에는 '안녕하세요.\n'와 같이 \n이 이미 들어있기 때문입니다. 만약 strip('\n')을 생략하면 문자열 한 줄을 출력할 때마다 빈 줄이 계속 출력됩니다. 즉, 문자열 안에 든 \n과 print가 출력하는 \n 때문에 줄바꿈이 두 번 일어납니다.
27.2.5  for 반복문으로 파일의 내용을 줄 단위로 읽기
while 반복문에서 readline을 사용하니 동작 방식이 조금 헷갈리죠? 파이썬에서는 for 반복문으로 좀 더 간단하게 파일의 내용을 읽을 수 있습니다. 다음은 for 반복문에 파일 객체를 지정하여 줄 단위로 파일의 내용을 읽습니다.
with open('hello.txt', 'r') as file:    # hello.txt 파일을 읽기 모드(r)로 열기     for line in file:    # for에 파일 객체를 지정하면 파일의 내용을 한 줄씩 읽어서 변수에 저장함         print(line.strip('\n'))    # 파일에서 읽어온 문자열에서 \n 삭제하여 출력
안녕하세요. 파이썬 코딩 도장입니다.
for line in file:로 간단하게 파일의 내용을 한 줄씩 읽었습니다. 이렇게 for 반복문에 파일 객체를 지정하면 반복을 할 때마다 파일의 내용을 한 줄씩 읽어서 변수에 저장해줍니다.
참고 | 파일 객체는 이터레이터
파일 객체는 이터레이터입니다. 따라서 변수 여러 개에 저장하는 언패킹(unpacking)도 가능합니다(이터레이터는 'Unit 39 이터레이터 사용하기' 참조).
>>> file = open('hello.txt', 'r') >>> a, b, c = file >>> a, b, c ('안녕하세요.\n', '파이썬\n', '코딩 도장입니다.\n')
물론 a, b, c = file과 같이 사용하려면 hello.txt에는 문자열 3줄이 들어있어야 합니다. 즉, 할당할 변수의 개수와 파일에 저장된 문자열의 줄 수가 일치해야 합니다.
◀ 27.1 파일에 문자열 쓰기, 읽기27.3 파이썬 객체를 파일에 저장하기, 가져오기 ▶︎
Unit 1. 소프트웨어 교육과 파이썬
Unit 2. 파이썬 설치하기
Unit 3. Hello, world!로 시작하기
Unit 4. 기본 문법 알아보기
Unit 5. 숫자 계산하기
Unit 6. 변수와 입력 사용하기
Unit 7. 출력 방법 알아보기
Unit 8. 불과 비교, 논리 연산자 알아보기
Unit 9. 문자열 사용하기
Unit 10. 리스트와 튜플 사용하기
Unit 11. 시퀀스 자료형 활용하기
Unit 12. 딕셔너리 사용하기
Unit 13. if 조건문으로 특정 조건일 때 코드 실행하기
Unit 14. else를 사용하여 두 방향으로 분기하기
Unit 15. elif를 사용하여 여러 방향으로 분기하기
Unit 16. for 반복문으로 Hello, world! 100번 출력하기
Unit 17. while 반복문으로 Hello, world! 100번 출력하기
Unit 18. break, continue로 반복문 제어하기
Unit 19. 계단식으로 별 출력하기
Unit 20. FizzBuzz 문제
Unit 21. 터틀 그래픽스로 그림 그리기
Unit 22. 리스트와 튜플 응용하기
Unit 23. 2차원 리스트 사용하기
Unit 24. 문자열 응용하기
Unit 25. 딕셔너리 응용하기
Unit 26. 세트 사용하기
Unit 27. 파일 사용하기
27.1 파일에 문자열 쓰기, 읽기
27.2 문자열 여러 줄을 파일에 쓰기, 읽기
27.3 파이썬 객체를 파일에 저장하기, 가져오기
27.5 연습문제: 파일에서 10자 이하인 단어 개수 세기
27.6 심사문제: 특정 문자가 들어있는 단어 찾기
Unit 28. 회문 판별과 N-gram 만들기
Unit 29. 함수 사용하기
Unit 30. 함수에서 위치 인수와 키워드 인수 사용하기
Unit 31. 함수에서 재귀호출 사용하기
Unit 32. 람다 표현식 사용하기
Unit 33. 클로저 사용하기
Unit 34. 클래스 사용하기
Unit 35. 클래스 속성과 정적, 클래스 메서드 사용하기
Unit 36. 클래스 상속 사용하기
Unit 37. 두 점 사이의 거리 구하기
Unit 38. 예외 처리 사용하기
Unit 39. 이터레이터 사용하기
Unit 40. 제너레이터 사용하기
Unit 41. 코루틴 사용하기
Unit 42. 데코레이터 사용하기
Unit 43. 정규표현식 사용하기
Unit 44. 모듈과 패키지 사용하기
Unit 45. 모듈과 패키지 만들기
Unit 46. 실전예제: 웹의 데이터로 그래프 그리기
C 언어 코딩 도장
- 이 사이트에 실린 모든 내용, 디자인, 이미지, 편집 구성의 저작권은 (주)도서출판 길벗과 지은이에게 있습니다.
- 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다.
- 책의 내용을 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다.
- 링크, SNS 공유는 허용합니다.
서울시 마포구 서교동 월드컵로 10길 56 (서울시 마포구 서교동 467-9)
Copyright © 2016-2021 Coding Dojang