2. 문자열 여러 줄을 파일에 쓰기, 읽기\
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 을 붙이지 않으면 문자열이 모두 한 줄로 붙어서 출력된다.
2-2. 리스트에 들어있는 문자열을 파일에 쓰기
- 리스트에 들어있는 문자열을 파일에 쓰려면 아래와 같이 작성해야 한다.
파일객체.writelines(문자열리스트)
- writelines 는 리스트에 들어있는 문자열을 파일에 쓴다.
lines = ['안녕하세요.\n', '파이썬\n', '코딩 도장입니다.\n'] with open('hello.txt', 'w') as file: # hello.txt 파일을 쓰기 모드(w)로 열기 file.writelines(lines) # 출력 안녕하세요. 파이썬 코딩 도장입니다.
- writelines 를 사용할 때는 반드시 리스트의 각 문자열 끝에 개행 문자 \n 을 붙여줘야 하고, 그렇지 않으면 문자열이 모두 한 줄로 붙어서 저장된다.
2-3. 파일의 내용을 한 줄씩 리스트로 가져오기
- read는 파일의 내용을 읽어서 문자열로 가져오지만 readlines 는 파일의 내용을 한 줄씩 리스트 형태로 가져온다.
변수 = 파일객체.readlines()
with open('hello.txt', 'r') as file: # hello.txt 파일을 읽기 모드(r)로 열기 lines = file.readlines() print(lines) # 출력 ['안녕하세요.\n', '파이썬\n', '코딩 도장입니다.\n']
2-4. 파일의 내용을 한 줄씩 읽기
- 파일의 내용을 한 줄씩 순차적으로 읽으려면 readline 을 사용한다.
변수 = 파일객체.readline()
- 파일에 문자열이 몇 줄이나 있는지 모르기 때문에, readline 으로 파일을 읽을 때는 while 반복문을 활용해야 한다.(while은 특정 조건이 만족할 때 계속 반복하므로 파일의 크기에 상관없이 문자열을 읽어올 수 있다.)
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에서 이런 특성을 이용하여 조건식을 만들어준다.(즉, line != '' 와 같이 빈 문자열이 아닐 때 계속 반복하도록 만듦)
- 반복문 안에서는 line = file.readline() 과 같이 문자열 한 줄을 읽어서 변수 line에 저장해주면 된다.
- 특히 변수 line은 while로 반복하기 전에 None으로 초기화해줬는데 만약 line을 만들지 않고 while을 실행하면 없는 변수와 빈 문자열 '' 을 비교하게 되므로 에러가 발생하며, line을 None이 아닌 '' 로 초기화하면 처음부터 line != '' 는 거짓이 되므로 반복을 하지 않고 코드가 그냥 끝나버린다.
line = None # 변수 line을 None으로 초기화 while line != '':
- 문자열을 출력할 때는 print(line.strip('\n') 과 같이 strip 메서드로 \n을 삭제했는데, 이는 파일에서 읽어온 문자열에 '안녕하세요. \n' 과 같이 \n이 이미 들어있기 때문이다.
- 만약 strip('\n') 을 생략하면, 문자열 안에 든 \n과 print가 출력하는 \n때문에 줄바꿈이 두 번 일어나서, 문자열 한 줄을 출력할 때마다 빈 줄이 계속 출력된다.
2-5. for 반복문으로 파일의 내용을 줄 단위로 읽기
- for 반복문에 파일 객체를 지정하여 줄 단위로 파일의 내용을 읽을 수 있다.(좀 더 간단한 방법)
- for line in file: 로 간단하게 파일의 내용을 한 줄씩 읽었다.with open('hello.txt', 'r') as file: # hello.txt 파일을 읽기 모드(r)로 열기 for line in file: # for에 파일 객체를 지정하면 파일의 내용을 한 줄씩 읽어서 변수에 저장함 print(line.strip('\n')) # 파일에서 읽어온 문자열에서 \n 삭제하여 출력 # 출력 안녕하세요. 파이썬 코딩 도장입니다.
- for 반복문에 파일 객체를 지정하면 반복을 할 때마다 파일의 내용을 한줄씩 읽어서 변수에 저장해준다.
※ 파일 객체는 이터레이터
- 파일 객체는 이터레이터이므로 변수 여러 개에 저장하는 언패킹(unpacking)도 가능하다.
>>> file = open('hello.txt', 'r') >>> a, b, c = file >>> a, b, c ('안녕하세요.\n', '파이썬\n', '코딩 도장입니다.\n')
- 물론 a, b, c = file 과 같이 사용하려면 hello.txt 에는 문자열이 3줄 들어있어야 한다.(즉, 할당할 변수의 개수와 파일에 저장된 문자열 줄의 수가 일치해야 함)
'Python 코딩도장' 카테고리의 다른 글
파이썬 코딩도장 Unit 28 정리(1) - 회문 판별하기 (0) | 2022.02.17 |
---|---|
파이썬 코딩도장 Unit 27 정리(3) - 파이썬 객체를 파일에 저장하고 가져오기 (0) | 2022.02.16 |
파이썬 코딩도장 Unit 27 정리(1) - 파일에 문자열 쓰기, 읽기 (0) | 2022.02.14 |
파이썬 코딩도장 Unit 26 정리(5) - 반복문, 세트 표현식 사용 (0) | 2022.02.11 |
파이썬 코딩도장 Unit 26 정리(4) - 세트의 할당과 복사 (0) | 2022.02.10 |