선미 파이썬 0404 18일차
azuremei
#12_file_io ''' [파일 입출력] file input/output standard input/output(표준입출력 : 콘솔/idle) 콘콜 : 콘솔창(까만화면)에서 입력받거나 출력하는 것을 표준입출력이라고 함 - 파일 입출력 :파일을 생성, 삭제, 읽기, 쓰기 등을 하는 것 - 파일과 디렉토리 디렉토리 : > 폴더 혹은 디렉토리 > 파일과 또다른 디렉토리를 포함할 수 있다. > 용량이 없다. 파일 : > 컴퓨터에서 정보를 저장하는 논리적인 단위 > 파일명+확장자 > 읽기, 쓰기, 실행 등을 할 수 있다. (폴더는 안으로 접근하다는 개념만 있고 읽기, 실행 등의 기능은 수행하지 않는다.) > 파일은 물리적인 디스크(hdd, ssd, usb...)에 내용이 쓰여져 있고 우리가 폴더형태를 찾고 실행하는 것은 운영체제(os)의 파일시스템 역할(폴더는 파일시스템에서 구분하기 좋으라고 만들어준 것) > 기본적으로 모든 파일은 메모장으로 열 수 있다. 우리가 idle 편집기를 통해 소스 파일을 다루는 것도 메모장으로 열어서 편집하는 것과 동일(but idle는 코드실행과 같은 기능이 있는 것.) - binary 파일 : 특정 프로그램으로 열어야 알아볼 수 있는 파일(메모장으로 열었을 때 알아볼 수 있는 형태 : docc, hwp) - text 파일 메모장으로 열었을 때 우리가 알아볼 수 있는 파일, 순수 텍스트 파일 (예 : txt, .py, .html, .xml) - > 파일을 읽는 것은 메모장으로 열었을 때 보이는 형태 그대로 읽는다(기본적인 파일입출력) 텍스트파일 형태는 우리가 다룰 수 있지만 바이너리는 알아볼 수 없어져서 못다룬다 바이너리 파일을 프로그램으로 다두류면 워드가 docx 열었듯 분석해야한다. 그래서 이런 형태의 파일을 다룰 때는 라이브러리를 차용함 [파일 다루는 방법] 파일객체 = open("파일이름", "파일열기모드") 이 때의 파일 이름은 상대경로/절대경로가 들어갈 수 있다. 절대경로는 c\부터 다 들어감 파일객체 = 변수(오픈을 통해 파일 경로를 전달해줄 때 그를 다루는 변수) 파일이름 = 컴퓨터에 존재하는 파일명 혹은 전체경로(절대경로)를 포함하는 파일명 파일열기모드 - 파일 객체도 엄밀히 말하면 도구 - r : 읽기모드 : 파일의 내용을 읽기만 하고 싶을 때 - w : 쓰기모드 : 파일에 내용을 쓰고싶을 때 - a : 추가모드 : 파일의 내용을 추가(쓰는것) - w+, a+, r+ 등등....추가 모드도 있다. ''' ''' #file : 파일객체(변수처럼사용), c:의 :은 드라이브를 나타냄, \는 폴더를 구분함 file = open("c:\\test.txt", "r") # 문자열로 경로를 다룰 때는 \\를 사용(두 개 써야 하나로 인식) file_name = "c:\\test.txt" text = file.read() #파일 내용 전체를 '문자열로 반환해준다' > return "내용전체" print(text) #읽은 파일 내용 출력 #파일을 open했으면 반드리 close도 해줘야 함 file.close() #열고 있으면 다른 프로그램이 이 파일을 다룰 수 없다. #with문을 이용하여 클로즈 생략하기 with open(file_name, "r") : # 문자열로 경로를 다룰 때는 \\를 사용(두 개 써야 하나로 인식) text = file.read() #파일 내용 전체를 '문자열로 반환해준다' > return "내용전체" print(text) #위드의 수행문이 끝나면 오픈했던 파일이 자동으로 클로즈된다. #파일의 내용을 한 번씩 읽기(1) #readlines : '복수!!!' with open("c:\\test.txt", "r") : text_list = file.readlines() # 전체의 내용을 한 줄씩 리스트에 추가 print(text_list) print("파일은 {}줄 입니다.".format(len(text_list))) #파일 내용을 한 줄씩 읽기 (2) #readline() : s없음, 한 줄씩 문자ㅕㅇㄹ로 변환 with open("c:\\test.txt", "r") : while True : #무한반복 text_list = file.readline() print(text_list, end="") print("파일은 {}줄 입니다.".format(len(text_list))) if not text : # readline을 통해 읽은 내용이 없다(비어있다.) break #readline을 할 때마다 '알아서' 읽고 난 뒤를 읽는다. #현재 내가 읽을 위치를 offset이라고 하는데 open하고 처음에는 맨 앞, readline하고나면 한 줄 읽음 >>>> 자동으로 다음줄로 옵셋 이동 ''' #파일의 단어, 라인, 통계 산출 with open("C:\\test.txt", "r") as file : test = file.read() #전체 내용 모두 읽음 word_list = test.split(" ") line_list = test.split("\n") print(word_list, "\n", line_list) print("단어 개수 : ", len(word_list)) print("라인 개수 : ", len(line_list)) #파일 쓰기 >>> w로 하면 파일이 존재할 때 새로 만든다(기존 파일이 날아감...) with open("C:\\test2.txt","w") as file : for i in range (1, 11) : #1~10까지 대입 text = "{}번째 줄입니다. \n".format(i) file.write(text) #리드라인과 마찬가지로 라이트도 하고나면 자동으로 옵셋으로 돌아간다.(처음 옵셋은 0) #파일 입출력 연습 ''' c드라이브 root에 test_new.txt파일을 만들고 아래 내용을 작성한 뒤 파일을 읽어서 (r) 아래와 같이 출력 [출력내용] 전체 글자 수 : ?? 전체 단어 수 : ?? 전체 라인 수 : ?? '사랑' 단어 수 : ?? test_new.txt 내용 사랑하는 엄마에게... 안녕하세요 엄마! 사랑하는 자식 홍길동이에요. 그럼 이만..ㅎㅎ '''