# 파일 및 디렉토리 다루기

# 파일 객체를 리턴하기 : open()
# 파일 객체 = open(파일명, 모드, 인코딩)

# 파일 객체 멤버함수
# write / read / readline / readlines / seek / tell / close

# 파일 열기 모드
# 모드 r : 읽기 모드. 파일을 읽기만 할 때
# 모드 w : 쓰기 모드. 파일에 내용을 쓸 때
# 모드 a : 추가 모드. 파일의 마지막에 새로운 내용을 추가시킬 때

# 쓰기 모드 : 파일 없으면 만들고, 있으면 날아가고 새로 쓴다.
# tell() : 파일의 작업 위치를 찾아준다
# seek() : 파일의 작업 위치를 변경한다.
def file_write():
    fp = open("test.txt", "w")
    print(fp.tell())    # 파일의 작업 위치값 : 0. 커서 위치라 생각하면 쉽다!
    fp.write("abcdefghi")
    print(fp.tell())    # 0 + 9 = 9
    fp.write("hello")
    print(fp.tell())    # 9 + 5 = 14
    fp.seek(3)      # 작업 위치를 3번으로 이동시킨다
    fp.write('123') # 3번에서부터 다시 쓴다!
    fp.close()

file_write()

# 읽기 모드
def file_read():
    fp = open("test.txt", "r")
    rd = fp.read()      # 파일에 있는 데이터를 참조한다.
    print(rd)
    fp.close()

    # # 일정한 byte만 읽기
    # rd1 = fp.read(3)
    # print(fp.tell())
    # print(rd1)
    # rd1 = fp.read(3)
    # print(fp.tell())
    # print(rd1)
    # # 파일 끝까지 읽기
    # while True:
    #     rd4 = fp.read(3)
    #     if rd4 == None:
    #         break
    #     print(rd4)
    # fp.close()

file_read()

# 라인별로 입력 및 readline 출력
def file_write_line():
    fp = open("line.txt", "w")
    fp.write("abc\\ndef\\nghi")
    fp.close()

file_write_line()

def file_read_line():
    fp = open("line.txt", "r")
    rd = fp.readline()
    for r in fp:
        print(r)
    #print(rd)
    fp.close()

file_read_line()