(수업내용 : 순차접근과 임의 접근
- 파일에서 읽기나 쓰기가 수행되면 파일 포인터가 갱신된다. 예를 들어 읽기 모드로 파일을 열고, 100바이트를 읽었다면
파일 포인터의 값이 100이 된다. 다음에 다시 200바이트를 읽었다면 파일 포인터는 300이 된다. 우리가 입출력 함수를
사용하면 그 함수의 내부에서 파일 포인터의 값이 변경된다. 사실 프로그래머는 파일 포인터에 대하여 크게 신경 쓸 필요
는 없다.
- 보통 순차적으로 데이터를 읽게 되면 파일 포인터는 파일의 시작 위치에서 순차적으로 증가하여 파일의 끝으로 이동한
다. 그러나 만약 파일의 데이터를 전체를 다 읽지 않고 부분적으로 골라서 읽고 싶은 경우에는 파일 포인터를 이동시켜서
임의 파일 액세스 할 수 있다. 임의(random)이라는 말은 임의의 위치에서 데이터를 읽을 수 있다는 의미이다. 예를 들어
서 데이터를 파일의 시작 부분으로부터 1000바이트 위치에서 읽었다가 다시 시작 위치로부터 500바이트 떨어진 위치에
서 읽어야 하는 경우도 있다. 즉 데이터를 임의의 위치에서 읽는 기능이 필요한 경우도 있는 것이다. 이때는 위치 표시자
를 조작하여야만이 파일을 원하는 임의의 위치에서 읽을 수 있다. 위치 표시자를 조작하는 함수는 seek()이다.
infile.seek(position)
- 현재의 위치는 tell() 함수로 알 수 있다
순차접근과 임의 접근
- 텍스트 파일에서 몇 개의 문자를 읽은 후에 seek()를 이용하여 다시 파일의 처음으로 돌아가보자.
infile = open("test.txt", “r")
str = infile.read(10)
print("읽은 문자열 : “, str)
position = infile.tell()
print("현재 위치: ", position)
position = infile.seek(0);
str = infile.read(10)
print("읽은 문자열 : ", str)
infile.close()
출력결과
읽은 문자열 : abcdefghij
현재 위치: 10
읽은 문자열 : abcdefghij) ) 객체 출력
- 객체를 pickle 모듈로 압축하려면 dump() 함수를 사용한다. 이것은 실제 피클을 병 안에 넣는 것으로 기억하면 편할 것이
다. dump() 함수는 파일 객체를 필요로 한다.
file = open( "d:\\save.p", "w" )
- 우리는 "w" 파일모드를 사용하였는데 우리가 이 파일안에 새로운 내용을 써야 하기 때문이다. 어떤 파일 이름이나 확장
자도 사용할 수 있다. 우리는 확장자로 ".p"을 사용한다.
- 최종적으로 pickle 모듈의 dump()를 호출하면 된다.
pickle.dump(gameOption, file)
) 정규식
- 정규식(regular expression)이란 특정한 규칙을 가지고 있는 문자들을 메타 문자를 이용하여 표현하는 수식이다. 메타 문
자는 카드 게임에서 와일드 카드나 마찬가지이다. 카드 게임에서 와일드카드란 조커와 같이 자기가 편리한 대로 사용할
수 있는 만능 카드를 말한다. 또 컴퓨터 디렉토리에서 파일의 이름을 정확하게 알 수 없을 때 사용하는 *나 ?도 정규식을
이용하는 것이다.
- 정규식은 또 하나의 언어라서 자세히 알기에는 너무 복잡하다. 우리는 최소한도로만 알아보자. 정규식에서 사용되는 메
타문자(와일드카드)의 의미를 요약하면 다음과 같다.
메타 문자 중에서 가장 중요한 문자는 점(.)과 별표(*)이다.
점은 어떤 문자가 와도 상관없다는 의미이다.
별표는 몇 번 반복되어도 상관없다는 것을 의미한다.
위의 정규식은 문자일은 X-Men으로 시작하어야 되고 그 이후에는 어떤 문자가 반복되더라도 좋다는 것을 나타낸다.
위의 정규식은 다음과 같은 문자열들과 매치된다.
-
파이썬에서 정규식을 사용하려면 re 모듈을 포함시켜야 한다.
import re
- 이어서 re.search()를 사용하면 정규식에 매치되는 문자열을 찾을 수 있다. , findall()을 사용하면 정규식을 만족하는 모든
문자열들을 추출할 수 있다. 오늘도 좋은 강의 잘 들었습니다. 항상 친절하고 자세하게 그리고 며쾌한 강의를 해 주셔서 감사합니다. 앞으로도 더욱 더 좋은 강의 부탁드립니다. 저도 강사님에 열정에 보답하도로 열심히 공부하겠습니다. 감사합니다 .오늘도 수고 많으셨습니다.^^