Python에서 Text File을 읽고 쓰는 것은 io.TextIOWrapper 객체를 이용하며 문자 기반의 stream 으로 이루어짐.
개행문자를 기반으로 flush가 이루어지는 line_buffering을 사용 가능함 (line_buffering=True 로 설정시).

시작하기 앞서 참고 자료:
2024.01.07 - [개발환경] - [CE] Text file: Text 파일이란?
[CE] Text file: Text 파일이란?
"text file" 은사람과 컴퓨터가 읽을 수 있고 처리할 수 있도록 encoding 된 characters 로 이루어진electric text lines 로 구성되는 형태의파일 포맷 및 해당 파일을 가르킴.https://dsaint31.me/mkdocs_site/CE/ch01/code_
ds31x.tistory.com
Text file을 open 할 때, encoding 을 키워드로 오픈할 파일의 인코딩을 지정할 수 있음.
f = open('bin2txt.txt', 'rt', encoding='ascii', errors='ignore')
2024.01.16 - [Python] - [Python] Unicode and Python: encode and decode
[Python] Unicode and Python: encode and decode
encode : str 에서 bytes 로decode : bytes 에서 str 로 이때 encoding 방식이 필요하며,해당 encoding 방식에 따라 동일한 str 객체라도 다른 bytes 객체로 변환된다.참고로, str 객체가 같은 경우엔 Unicode의 codepoin
ds31x.tistory.com
추가적으로 line_buffering 과 write_through 키워드 파라미터를 설정가능:
- line_buffering=True 를 추가할 경우, 개행문자를 만나는 경우 자동 flush되는 line buffering 이 켜짐.
- write_through=True 를 추가할 경우, 내부 buffer를 우회하여 즉시 하위버퍼(file)로 쓰기가 이루어짐.
1. 쓰기 (Write)
open으로 얻은 file object의 메서드 write 또는 print 함수를 통해 쓰기를 수행함.
- 당연히 해당 file object는
wtorw등과 같이 Text file로 쓰기 (oraorx)등으로 열려야 함. - 'x' 로 파일을 열면, 지정한 파일이 존재하지 않을 때만 새로 파일을 생성하고, 생성한 파일을 쓰기 모드인 점 주의.
2023.07.04 - [Python] - [Python] file : open and close
[Python] file: open and close
Python 에서 file을 처리하기 위해선 다른 프로그래밍 언어와 마찬가지로 file에 대한 접근이 가능한 object를 얻어와야함.이같은 object는 file object, file handler, file descriptor 등의 여러 이름으로 불리며,P
ds31x.tistory.com
1-1. print() 함수
print 함수의 경우, standard output (stdout, 일반적으로 terminal)로 출력을 하는 것이 기본동작이나,
- file parameter로 쓰고자 하는 file object를
- keyward argument로 할당해 준 경우 파일에 출력이 이루어짐.
sep=' '라던지 end=\n' 등의 parameter들은 stdout에 출력할 때와 같으므로,
특별히 지정하지 않는 한, argument들을 사이에 space가 추가되고 newline이 붙어서 출력이 이루어짐.
print()는
한 line을 출력하는 것을 기본 동작으로 하고 있음을 명심할 것.
다음 예제로 사용 방법을 확인하자.
with open('test0.txt','w') as fout:
print('Test! This is a single line.',file=fout)
참고: stream이란
2024.09.11 - [CE] - [CE] Stream이란
[CE] Stream이란
Stream:데이터를 연속적으로 흐르는 방식으로 처리한다는 개념으로,데이터의 입출력을 일종의 bit (or byte) 들의 흐름으로 여겨서 처리하는 것으로 생각하고이와 같은 방식으로 I/O가 이루어지는 대
ds31x.tistory.com
2-2. write() 메서드
write()메서드는 text mode에서 파일에 쓴 character(글자)의 수를 반환함.
txt = '''First line of text
Second line of text
Third line of text'''
with open('test1.txt','w') as fout:
cnt = fout.write(txt)
print(f'write : {cnt} characters.')
- 주의할 것은
write메서드는 맨 뒤에 newline을 추가하지 않음. - 있는 그대로 argument로 받은 string을 file에 씀.
- 위의 예의 경우, multi-line string이므로 1,2번째 행들의 맨 끝에는 newline이 있음.
참고로 binary file의 경우에는
write는
파일에 쓴 byte 수를 반환함.
만약 파일에 써야할 text가 매우 큰 경우에는 이를 다음과 같이 chunk로 나누어 처리하는게 일반적임.
txt = '''First line of text
Second line of text
Third line of text'''
with open('test2.txt','w') as fout:
chunk = 10
offset = 0
max_size = len(txt)
while offset <= max_size:
print(f'num of character written : {fout.write(txt[offset:offset+chunk])}')
offset += chunk
3. 읽기 (read)
open으로 얻은 file object가 제공하는 다음의 메서드들을 통해 읽기를 처리함.
read: 통으로 한 번에 읽어들이거나 정해진 글자수(argument로 지정)만큼 읽어들이고, 읽어들인 문자열을 반환.- 빈파일이거나 EOF도달시 empty string 객체 반환.
readline: 한 line을 읽어들이고 해당 line에 해당하는 문자열을 반환.- 읽어들인 line에 newline으로 끝날 경우, 반환된 문자열도 newline 을 끝에 가지고 있음.
- 빈파일이거나 EOF도달시 empty string 객체 반환
readlines: 한번에 file을 여러 라인들을 읽어들여 각 line을 item으로 가지는 list를 반환.- 각 item들에는 newline 이 포함됨.
- 빈파일인 경우 empty list 반환.
3-1. read()
read()메소드는 arugment 없을 경우 파일 전체를 읽어들이고, int로 argument를 줄 경우 해당 숫자의 글자를 읽어들임.
- EOF(End of File)에 도달하여 더 이상 읽을 문자가 없을 경우, 빈문자열을 반환함.
다음 예를 참고.
txt = str()
with open('test2.txt', 'rt') as fin:
txt = fin.read()
print(txt)
위의 경우, 한번에 전체 파일을 읽어들이기 때문에 매우 큰 사이즈의 파일을 읽을 때는 아래와 같이 나누어서 읽어들이는게 일반적임.
txt = str()
with open('test2.txt', 'rt') as fin:
chunk = 10
while buf := fin.read(chunk):
txt += buf
print(txt)
3-2. readline()
한 line씩읽어들임.
- EOF(End of File)에 도달하여 더 이상 읽을 문자가 없을 경우, empty string(빈문자열)을 반환함.
txt = str()
with open('relativity', 'rt') as fin:
while line := fin.readline():
txt += line
print(txt)
3-3. readlines()
각 line을 item으로 가지는 list를 반환.
lines = None
with open('relativity', 'rt') as fin:
lines = fin.readlines()
print(len(lines), 'lines read')
for line in lines:
print(line, end='')
print('')
print('--------------')
tmp = ''.join(lines)
print(tmp)
참고: file object 자체가 iterator임.
open으로 반환되는 file에 대한 객체는 _io.TextIOWrapper로 자체가 iterator임.
때문에 다음과 같이 for문으로 각 line별로 읽어들이는 게 가능함.
txt = str()
with open('relativity', 'rt') as fin:
for l in fin:
txt += l
print(txt)
binary file의 읽기 쓰기도 text file의 경우와 거의 비슷함.
다음 URL참고.
2023.07.04 - [Python] - [Python] binary file : write and read
[Python] binary file : write and read
txt file과 거의 비슷하나, 다음의 차이를 보임. 파일 내용을 담는데 사용하는 class가 str을 주로 쓰는 txt file의 경우와 달리 bytes와 bytearray를 사용한다. bytes는 immutable이고, bytearray는 mutable인 점을 기
ds31x.tistory.com
관련자료
2023.12.05 - [Python] - [Python] File Handling
[Python] File Handling
File 열고 닫기. 2023.07.04 - [Python] - [Python] file : open and close [Python] file : open and close Python 에서 file을 처리하기 위해선 다른 프로그래밍 언어와 마찬가지로 file에 대한 접근이 가능한 object를 얻어와
ds31x.tistory.com
https://dsaint31.me/mkdocs_site/CE/ch01/code_for_character/
BME228
Codes for Characters Code 란 특정 형태의 information을 다른 방법으로 표현하는 규칙 또는 해당 규칙으로 표현된 결과물 을 가르킴. 문자를 나타내기 위한 code는 인간이 사용하는 문자 를 일종의 기호 또
dsaint31.me
'Python' 카테고리의 다른 글
| [Python] os 모듈의 함수들 : file과 directory 관련 (1) | 2023.07.04 |
|---|---|
| [Python] binary file: write and read (0) | 2023.07.04 |
| [Python] file: open and close (0) | 2023.07.04 |
| [Python] Regular Expression: 표현식 기초 및 요약 (0) | 2023.07.03 |
| [Python] venv : Python Virtual Environment (0) | 2023.06.30 |