26. Python 파일 입출력에서 작업 위치 변경 seek, 위치 확인 tell

안녕하세요. 언휴예요.

Python의 파일 개체에는 작업 위치를 변경하는 seek 메서드와 위치를 확인하는 tell 메서드를 제공하고 있어요.

seek 메서드는 이동할 offset과 기준 위치를 전달할 수 있습니다. 만약 이동할 offset만 전달하면 파일의 시작 위치에서 offset 바이트 이동하는 것입니다. 만약 기준 위치를 1을 전달하면 현재 작업 위치에서 상대적 위치로 양수와 음수 모두 사용할 수 있습니다. 기준 위치가 2를 전달하면 파일의 끝에서부터 이동입니다. 일반적으로 기준 위치가 2일 때는 음수를 전달합니다.

다음은 파일의 내용이 회문(앞 뒤가 똑같은 문장)인지 판별하는 예제 코드입니다.

#Palindrome

fname = input("파일명:")
try:
    fs = open(fname,"rb")
    data = fs.read()
    print("파일 데이터:",data)
    fs.seek(0,2)#파일 끝에서 0바이트 이동(파일 끝으로 이동)
    fsize = fs.tell()
    print("파일 크기:",fsize,"bytes")
    pflag = True
    for i in range(0,fsize):
        fs.seek(i) #파일 시작에서 i바이트 이동
        bd = fs.read(1)
        fs.seek(-(i+1),2) #파일 끝에서 (i+1)바이트 이전으로 이동
        ad = fs.read(1)
        if(bd != ad):
            pflag = False
            break
    fs.close()

    if pflag:
        print("회문입니다.")
    else:
        print("회문이 아닙니다.")
except:
    print("예외가 발생하였습니다.")
[그림 1] 파일 내용이 회문인지 판별 - seek, tell 이용
[그림 1] 파일 내용이 회문인지 판별 – seek, tell 이용