파일 처리 방법

  1. 파일 열기 두 가지 방법 ============

방법 1: 파일을 열고 핸들에 할당하여 파일 조작

핸들 = open(파일 경로, 모드, 인코딩)

여기서 모드는 다음과 같습니다:

'r' 읽기 전용 모드 - 쓰기 불가능

'w' 쓰기 전용 모드 - 읽기 불가능

'a' 추가 전용 모드 - 파일의 끝에 내용 추가

방법 2: with 키워드 사용으로 자동으로 파일을 열고 닫음

  1. 파일 읽기 및 쓰기 방법 ==========

2.1 읽기 모드 'r'

읽기만 가능, 쓰기는 불가능

파일이 존재하지 않으면 오류 발생

with open('example.txt', 'r', encoding='utf-8') as file:
    content = file.read()

2.2 쓰기 모드 'w'

쓰기만 가능, 읽기는 불가능

파일이 없으면 새로 생성

'w' 모드는 덮어쓰기 모드로, 기존 내용이 모두 삭제되고 새로운 데이터를 작성

with open('write_example.txt', 'w', encoding='utf-8') as file:
    file.write('크리스티아누 호날두')

2.3 추가 모드 'a'

파일이 존재하지 않으면 새 파일을 생성하고 데이터를 작성

파일의 마지막에 새로운 데이터를 추가

with open('append_example.txt', 'a', encoding='utf-8') as file:
    file.write('킬리안 음바페')
  1. 파일 조작 방식 ==========

3.1 '+' 모드

기존 모드에 새로운 기능을 추가

'r+' 읽기와 쓰기가 가능하며, 이 경우 쓰기는 덮어쓰기

'w+' 읽기와 쓰기가 가능

  • 모드는 권장되지 않음, 파일은 주로 데이터를 읽거나 쓰는 용도로 사용됨

3.2 'b' 모드

바이너리 모드로 모든 유형의 파일 조작 가능

'r' -> 'rb', 'w' -> 'wb', 'a' -> 'ab' 형태로 변경 필요

1. 이 모드는 모든 유형의 파일을 다룰 수 있음

2. 이 모드에서는 encoding 매개변수를 지정할 수 없음

3. 읽기 및 쓰기는 바이트 단위로 이루어짐

3.3 파일 읽기/쓰기 코드 예제

# 리스트를 먼저 작성
# num_list = [1, 2, 3]
# write() 인자는 str이어야 함, list는 안 됨
# with open("numbers.txt", "w", encoding="utf-8") as fp:
#     fp.write(str(num_list))

# 다시 읽어오기
# with open("numbers.txt", "r", encoding="utf-8") as fp:
#     data = fp.read()
# print(data, type(data))  # <class 'str'>

# with open("user_data.txt","a",encoding="utf-8") as fp:
#     fp.write("사용자|비밀번호|취미" + "\n")

'''
users = {}
with open("user_data.txt", "r", encoding="utf-8") as fp:
    lines = fp.read()
for line in lines.split():
    username, password, hobby = line.split("|")
    users[username] = {
        "username": username,
        "password": password,
        "hobby": hobby
    }
print(users)
'''
  1. 파일 조작 내장 메소드 ============

4.1 'r' 모드 내장 메소드

f.read() - 전체 내용을 한 번에 읽음

f.readline() - 한 줄의 데이터만 읽음

f.readlines() - 모든 데이터를 읽지만 각 줄의 데이터는 리스트 요소로 저장

for i in f: 핸들은 반복 가능하며, 각 요소는 줄입니다

f.readable() - 현재 핸들이 읽기 가능한지 확인

4.2 'w' 모드 내장 메소드

f.write() - 모든 내용을 한 번에 작성

f.writelines(리스트) - 리스트의 각 요소를 하나의 문자열로 연결하여 작성

f.writable() - 현재 핸들이 쓰기 가능한지 확인

with 문을 벗어나기 전까지 연속적인 write는 계속 데이터를 쓸 수 있음

  1. 파일 내 포인터 제어 =============

(1) 서론

(2) read 매개변수

read 함수 안의 숫자는 읽을 문자 수를 제어하며, 처음부터 읽음

숫자가 기본값(-1)이면 처음부터 끝까지 읽음

(3) seek 포인터 이동

seek(offset, whence)

offset은 이동할 바이트 수

whence 이동 모드:

0: 기본 모드, 파일 시작을 기준으로 이동, 텍스트 및 바이너리 지원

1: 현재 위치를 기준으로 이동, 바이너리만 지원

2: 파일 끝을 기준으로 이동, 바이너리만 지원

1 모드는 바이너리 데이터에만 적용 가능하며, 텍스트 데이터에는 상대적 이동이 지원되지 않음

특정 위치로 포인터를 이동하여 데이터를 작성하면 해당 바이트 위치에서 덮어쓰기됨

한글자 문자는 3바이트를 차지하므로, 만약 한글자 문자를 적절히 작성하지 못하면 깨진 문자가 될 수 있음

태그: 파일처리 python 파일입출력

6월 5일 19:58에 게시됨