파이썬

6주차, 파일입출력, 인코딩, with open as, os.listdir

호놀롤루 2022. 1. 28. 05:21

open()함수는 엑셀이나 데이터베이스를 여는 함수다. close() 안해주면 메모리 계속 소비됨

 

매개변수는 첫번째, 파일의 경로 ("C://Users/Home/Documents/text.txt" 등)

두번째, 파일 열기 방식 (읽기, 쓰기 모드 등)

세번째, 인코딩 방식

 

두번째 매개변수를 정리해보면

'r': 읽기용

'w': 쓰기용 (이미 같은 경로에 파일이 존재하면 파일 내용을 지움)

'a': 쓰기용으로 열기, 근데 'w'랑 다르게 이미 같은 경로에 파일이 존재하면 내용 덧붙이기

'x': 배타적 생성모드, 파일이 이미 존재하면 예외를 일으킴

'rb': 바이트 어레이 일기

'wb': 바이트 어레이 쓰기

 

세번째 매개변수인 인코딩의 종류는 encoding="utf-8" 등의 형태로 씀

 

ASCII

・ 미국 정보 교환 표준 부호

・ ASCII는 8비트만을 이용하여 음이 아닌 수(0~127)에 문자를 할당, 61 = '=', 65 = 'A', 97 = 'a'

・ 52개의 알파벳 대소문자, 10개의 숫자, 32개의 특수문자, 하나의 공백 문자, 33개의 출력

・ 불가능한 제어문자로 128개 문자를 표현, 한글은 안됨

 

ISO/IEC 8859-1

・ 8비트를 사용해서 256(2^8)개의 문자를 표현

 

ISO/IEC 8859-N

・ 중앙유럽어, 남유럽어, 북유럽어, 아랍어 등을 지원

 

DBCS(Double-Byte-Character Set)

・ 2바이트(16비트)를 활용해서 문자 집합을 구성하는 방법

・ 최대 65,536(2^16)개의 문자를 할당할 수 있고, 한글(총 11,172자), 중국과 일본의 문자를

컴퓨터로 표현 가능

・ DBCS는 ASCII와의 호완을 유지하기 위해 최상위 비트가 0이면 ASCII, 1이면 DBCS로 인식

・ 한글 문자 집합 표준으로는 KS X 1001, EUC-KR, CP949 등이 있다.

 

유니코드

・ 문자 집합 하나로 모든 문자를 표현할 수 있게 하는 것이 목적

・ 초기에는 전세계의 언어별 문자들을 2바이트 안에서 영역을 나눠 할당

・ 누락된 문자와 기호를 계속 추가하다 보니 2바이트를 넘어섬

 

UTF(Unicode Transformation Format)

・ 유니코드 변환 인코딩 형식

・ UTF-8은 코드포인트의 크기에 따라 1바이트에서부터 4바이트까지 가변폭으로 인코딩하므로,

1바이트로 표한가능한 U+0000(십진수 0)부터 U+007F(십진수 127)까지는 ASCII와 완벽하게

호환

・ UTF-8 인코딩 방식으로 저장된 문서는 유니코드를 알지 못하는 시스템에서도 사용 가능

・ UTF-8 외에도 UTF-7, UTF-16, UTF-32 인코딩 등이 있음

 

파일 경로 설정

1. 절대 경로

・ 파일의 경로를 루트(가장 기본이 되는 폴더)부터 직접 기재하는 방식

  ・ 윈도우의 경우 폴더 구분 기호를 ₩를 사용하고 리눅스나 맥 등은 /를 사용

  ・ ₩는 escape문자이기 때문에 ₩₩로 입력해야 됨

 

2. 상대 경로

・ 파일의 경로를 현재 위치로부터 상대적으로 입력

・ ./ : 현재 폴더를 의미, 생략해도 무방

・ ../ : 상위 폴더를 의미

 

import os

os.getcwd()

로 현재 경로를 확인할 수 있다.

 

다 설정해서 파일을 읽을 때

1. read() : 파일 전체 내용을 문자열로 반환

file = open('/users/imsunghan/desktop/test.txt', 'r')

text = text.read()

file.close

 

2. readlines() : 파일의 모든 줄을 읽고, 각 줄을 요소로 가지는 리스트 반환

file = open('/users/imsunghan/desktop/test.txt', 'r')

text = text.readlines()

file.close

 

3. readline() : 파일의 첫 줄을 읽고 문자열 반환, 재호출시 그 다음 줄의 문자열 반환

file = open('/users/imsunghan/desktop/test.txt', 'r')

text = text.readline()

file.close

 

4. For문으로 읽기 : 반복문으로 읽으면 줄 별로 처리 가능

file = open('/users/imsunghan/desktop/text.txt', 'r')

for i in file:

    print(i)

file.close

 

파일 쓰는 법

file = open('/users/imsunghan/desktop/test2.txt', 'w')

text = file.write('연습')

file.close

 

이미 있는데 w 쓰면 원래 거 삭제되니 안전하게 x로 하는 게 낫다. x로 했을 때 이미 있으면 에러

추가할 땐 a로

 

open() 함수와 함께 with ~ as 문을 사용하면 명시적으로 close() 함수를 호출하지 않아도 항상

닫힌다.

 

with open('text.txt', 'r') as file:

    text = file.read()

    print(text)

 

import os

 

dir_list = os.listdir("./")  //현재 디렉토리 안에 있는 하위 디렉토리와 하위 파일리스트를 리스트로 반환

                                        // 앞에 . 이 붙은 파일은 숨겨진 파일인데 listdir()하면 다 나옴

for name in dir_list:

    print(name)

 

# 디렉토리 생성

os.mkdir("test")