매일공부

[파이썬 초보] 파일 열기 오류 & (리스트 활용)특정내용 수정 본문

Programming/Python

[파이썬 초보] 파일 열기 오류 & (리스트 활용)특정내용 수정

aram 2022. 7. 13. 22:11

1. 열고자 하는 파일이 폴더에 존재하지만 안 열릴 경우

OSError: [Errno 22] Invalid argument: 'c:\\coding\naver.txt'

> 이스케이프 문자(\n)로의 해석 여지가 원인

> 파일 경로 수정

"c:\\coding\\naver.txt"

"c:/coding/naver.txt"

r"c:\coding\naver.txt"

 

2. 파일의 유니코드 오류

UnicodeDecodeError: 'cp949' codec can't decode byte 0xeb in position 0: illegal multibyte sequence

> 영어가 아닌 한국어라 생긴 오류

> 인코딩 변경

UTF-8 / utf-8 / utf-8-sig / ansi

: 인코딩 > 문자를 숫자로 변환(메모리에 저장, 처리 목적)

: 디코딩 > 숫자를 문자로 변환(가독성, 출력)

 

3. 파일 안의 '특정 내용' 수정

파일을 열고 readlines()로 한줄씩 파일 읽기

> if문으로 수정할 열만 원하는 내용으로 수정 후 append()로 리스트 저장

> 아니면 그대로 리스트에 저장

> 파일을 '쓰기'로 열고 리스트에 저장한 내용을 덮어씌워서 저장

e_lines = []

with open(r"c:\coding\naver.txt", 'r', encoding='UTF-8') as f: #파일열기 & "유니코드"필수
    lines = f.readlines() #한줄씩 읽기
    for line in lines:
        if "상품 이미지" in line: # 수정하고자 하는 특정 내용 찾기
            e_lines.append(" ") #읽은 lines를 리스트에 수정 내용으로 추가
        else:
            e_lines.append(line) #읽은 lines를 리스트에 그대로 추가
            
with open("c:\\coding\\naver.txt", 'w', encoding='UTF-8') as f:
    f.writelines(e_lines)
    # 저장된 리스트를 파일에 덮어씌우기

>> 원본: https://bingbingba.tistory.com/9 

>> 한 줄 전체가 수정되는 개념

>> 원하는 한 줄 전체를 새로 입력해야 함

 

 

▼ open 코드 <참조>

더보기

1. open한 파일을 별도 지정

   > close 필수(안 닫을 경우 열은 파일이 손상될 수 있음)

fo = open("c:\\coding\\naver.txt")
fo.close()

 

2. with open~ as~ 구문

   > 파일을 열고 블록으로 실행여부 판단

   > 블록이 끝나면 자동으로 close

with open(r"c:\coding\naver.txt", 'r', encoding='UTF-8') as f:
    lines = f.readlines()

 

Comments