본문 바로가기
Python

[Python] Text File: read and write

by ds31x 2023. 7. 4.

시작하기 앞서 참고 자료:

2024.01.07 - [개발환경] - [CE] Text file: Text 파일이란?

 

[CE] Text file: Text 파일이란?

"text file" 은사람과 컴퓨터가 읽을 수 있고 처리할 수 있도록 encoding 된 characters 로 이루어진electric text lines 로 구성되는 형태의파일 포맷 및 해당 파일을 가르킴.특징.text file 이 가지는 다양한 특

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의 codepo

ds31x.tistory.com


1. 쓰기 (Write)

open으로 얻은 file object의 메서드 write 또는 print 함수를 통해 쓰기를 수행함.

 

당연히 해당 file object는 wt or w 등과 같이 Text file로 쓰기 (or a or x)등으로 열려야 함.

2023.07.04 - [Python] - [Python] file : open and close

 

[Python] file : open and close

Python 에서 file을 처리하기 위해선 다른 프로그래밍 언어와 마찬가지로 file에 대한 접근이 가능한 object를 얻어와야함. 이같은 object는 file handler, file descriptor 등의 여러 이름으로 불리며, 이를 얻

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로 지정)만큼 읽어들이고, 읽어들인 문자열을 반환.
  • readline : 한 line을 읽어들이고 해당 line에 해당하는 문자열을 반환.
    • 읽어들인 line에 newline으로 끝날 경우, 반환된 문자열도 newline 을 끝에 가지고 있음.
  • readlines : 한번에 file을 여러 라인들을 읽어들여 각 line을 item으로 가지는 list를 반환.
    • 각 item들에는 newline 이 포함됨.

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의 읽기 쓰기는 거의 비슷함.

 

다음 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