(수업내용 : 디렉토리 작업
-
파이썬 프로그램으로 파일을 처리하다 보면 어떤 디렉토리에 있는 전체 파일을 찾아서 처리해야 하는 경우가 종종 있다.
이때는 OS 모듈에서 제공하는 도구들을 사용할 수 있다.
현재
파이썬 프로그램이 실행되는 디렉토리를 작업 디렉토리(CVD: Current Working Directory)라고 한다. 작업 디렉토
리를 얻으려면 다음과 같은 함수 호출을 사용한다.
dir = os.getcwd()
- 우리가 처리하는 데이터 파일들이 data와 같은 서브 디렉토리에 저장되어 있다면 다음과 같은 문장으로 작업 디렉토리
를 변경할 수 있다.
subdir = "data"
os.chdir(subdir)
- 작업 디렉토리 안에 있는 파일들의 리스트를 얻으려면 listdir() 함수를 사용한다.
for filename in os.listdir():
print(filename)
) 디렉토리 작업
- listdir() 함수는 작업 디렉토리 안에 있는 파일 뿐만 아니라 디렉토리 이름도 반환한다. 파일만 처리하려면 다음과 같이
isfile() 함수를 사용한다.
if os.path.isfile(filename) :
print("파일입니다.")
- 파일의 확장자를 검사하려면 endswidth()를 사용한다. 예를 들어서 작업 디렉토리에서 확장자가 ".jpg"인 파일을 전부
찾아서 파일 이름을 출력하는 프로그램은 다음과 같다.
import os
cwd = os.getcwd()
files = os. listdir()
for name in files :
if os.path.isfile(name) :
if name.endswidth(".jpg") :
print(name)
실행결과
DSC04886_11.jpg
DSC04886_12.jpg
DSC04886_13.jpg) 이진 파일과 임의 접근 파일
- 파일과 이진 파일의 차이점을 살펴보자. 텍스트 파일에서는 모든 정보가 문자열로 변환되어서 파일에 기록되었다. 즉 정
수값도 print()를 통하여 문자열로 변환된 후에 파일에 쓰였다. 즉 123456와 같은 정수값을 화면에 출력하려면 6개의 문
자 '1', '2', '3', ‘4’, ‘5’, ‘6’ 으로 변환하여 출력하였다. 이 변환은 print() 함수가 담당하였다.
- 반면에 이진 파일(binary file)은 데이터가 직접 저장되어 있는 파일이다. 즉 정수 125456는 문자열로 변환되지 않고 0 1
226 64와 같은 이진수 형태로 그대로 파일에 기록되는 것이다. 이진 파일의 장점은 효율성이다. 우리가 텍스트 파일에서
숫자 데이터를 읽으려면 문자열을 읽어서 int()와 같은 함수를 사용하여 숫자로 변환하여야 하기 때문이다. 이 과정은 시
간이 많이 걸리며 비효율적이다. 이진 파일을 사용하면 이러한 변환 과정이 필요 없이 바로 숫자 데이터를 읽을 수 있으
며 텍스트 파일에 비하여 저장 공간도 더 적게 차지한다.
이진 파일과 임의 접근 파일
- 이진 파일의 단점은 인간이 파일의 내용을 확인하기기 힘들다는 점이다. 문자 데이터가 아니므로 모니터나 프린터로 출
력하는 것이 불가능하다. 또한 텍스트 파일은 컴퓨터의 기종이 달라도 파일을 이동할 수 있다. 왜냐하면 아스키 코드로
되어 있기 때문에 다른 컴퓨터에서도 읽을 수 있기 때문이다. 그러나 이진 파일의 경우, 정수나 실수 데이터를 표현하는
방식이 컴퓨터 시스템마다 다를 수 있기 때문에 이식성이 떨어진다. 따라서 이식성이 중요하다면 약간 비효율적이더라도
텍스트 형식의 파일을 사용하는 것이 좋다. 하지만 데이터가 상당히 크고 실행 속도가 중요하다면 이진 파일로 하는 것이
좋을 것이다. 이진 파일에서 데이터를 읽으려면 다음과 같이 파일을 열어야 한다.
infile = open(filename, "rb")
- 입력 파일에서 8 바이트를 읽으려면 다음과 같은 문장을 사용한다. bytesArray = infile.read(8)
bytesArray는 바이트형의 시퀀스로서 0부터 255까지의 값들의 모임이다. 첫 번째 바이트를 꺼내려면 다음과 같은 문장을
사용하면 된다.
byte1 = bytesArray[0]
- 이진 파일에 바이트들을 저장하려면 다음과 같이 한다.
outfile = open(filename, "wb")
bytesArray = bytes([255, 128, 0, 1])
outfile.write(bytesArray) 좋은 강의 잘 듣고 있습니다. 항상 친절하고 자세한강의 감사합니다 .저도 강사님에 열정에 맞게 열심히 공부하도록 하겠습니다 .감사합니다. 오늘도 수고하세요^^