이번에 다룰 주제는 파일의 내용을 읽어드리거나, 파일에 데이터를 기록하는 작업입니다. 프로그램이 실행되는 동안에 사 용되는 변수는 프로그램을 종료하면 사라져 버리기 때문에 프로그램이 끝난 후에도 데이터를 유지하려면 파일에 저장해야 합니다.
파이썬에서 파일 읽기와 쓰기를 하려면 os 모듈을 사용해야 합니다. Windows 에서 파일과 폴더의 구분은 구분기호는 백 슬래시(\)를 사용하여 작성됩니다. 폴더나 파일명의 문자열 값을 개별적으로 전달해 주려면 os.path.join()을 사용해서 작성됩니다.
>>> import os >>> os.path.join('Users', 'Viper', 'Appdata') 'Users\\Viper\\Appdata' >>>
위에서 백슬래쉬(\) 문자가 연속으로 2개가 있는 것을 주목해 주시기 바랍니다. 경로명을 구분해주는 백슬래쉬를 다른 백슬래쉬 문자로 이스케이프 처리를 해주어야 하기 때문에 백슬래쉬가 두개가 됩니다.
os.path.join() 함수 파일 이름에 문자열을 만들어야 할때도 사용할 수 있습니다.
>>> myFiles = ['aaa.txt', 'bbb.txt', 'ccc.txt'] >>> for i in myFiles: print(os.path.join('C:\\Users\\Viper', i))
C:\Users\Viper\aaa.txt C:\Users\Viper\bbb.txt C:\Users\Viper\ccc.txt
파이썬에서 현재 작업 폴더(디렉토리)를 알아내려면 os.getcwd() 함수를 사용합니다. 작업 폴더를 변경하려면 os.chdir() 을 사용합니다. 기본적으로 파이썬을 실행하면 현재 폴더는 파이썬이 설치된 폴더로 지정이 됩니다.
>>> import os >>> os.getcwd() 'C:\\Users\\eloy\\AppData\\Local\\Programs\\Python\\Python37-32' >>> os.chdir('C:\Temp') >>> os.getcwd() 'C:\\Temp'
폴더 생성하기
파이썬을 이용해서 폴더를 생성하려면 os.makedirs() 함수를 사용합니다.
>>> import os >>> os.makedirs('C:\\aaa\\bbb\\ccc') 절대 경로와 상대경로
Windows 에서 폴더의 경로를 지정하는 방법은 절대경로와 상대경로의 방법이 있습니다. 프로그래밍을 전혀 접해보지 못 한 분이라면 이게 무슨 의미가 있는지 의아해 할 수도 있으나, 프로그래밍에서는 상당히 중요한 개념이고 이걸 모르면 파 일과 폴더를 다루는 것은 거의 불가능하다고 말할 수 있을 정도로 중요한 개념입니다.
Windows 에서 절대경로는 항상 루트폴더에서 시작합니다. 상대경로는 현재 작업디렉토리와 관련이 있습니다. 점(.)과 점점(..)이 상대경로를 사용할 때 사용할 수 있는 개념입니다. 점(.)은 현재 디렉토리를 의미하고, 점점(..)은 현재 디렉토리 에서 한 폴더 상위(부모 디렉토리)의 폴더를 의미합니다.
파이썬에서 절대경로를 반환하려면 os.path.abspath(path) 함수를 사용합니다. 상대경로를 반환하려면 os.path.relpath(path, start) 함수를 사용합니다. os.path.isabs(path) 함수는 지정된 path 인수가 절대경로이면 True,
상대경로이면 False를 반환합니다.
>>> import os >>> os.getcwd() 'C:\\Users\\eloy\\AppData\\Local\\Programs\\Python\\Python37-32' >>> os.path.abspath('.') 'C:\\Users\\eloy\\AppData\\Local\\Programs\\Python\\Python37-32'
>>> os.path.abspath('.\\Scripts') 'C:\\Users\\eloy\\AppData\\Local\\Programs\\Python\\Python37-32\\Scripts' >>> os.path.abspath('..') 'C:\\Users\\eloy\\AppData\\Local\\Programs\\Python' >>> os.path.relpath('C:\\Windows', 'C:\\') 'Windows' >>> os.path.relpath('C:\\Windows', 'C:\\System32\\Microsoft') '..\\..\\Windows' >>>
폴더 내용과 파일크기 알아내기
os.path.getsize(path) 함수를 이용하면 파일의 크기와 path로 지정된 폴더 내의 파일과 폴더를 찾을 수 있습니다. os.listdir(path) 함수를 이용하면 path 인수에 있는 각 파일의 파일 이름과 문자열 목록을 확인할 수 있습니다.
>>> import os >>> os.path.getsize('C:\\aaa\\bbb\\ccc\\archangel.jpg') 40213 >>> os.listdir('C:\\aaa\\bbb\\ccc') ['Alabaster Dragon.JPG', 'Angelic Blessing.JPG', 'Archangel.JPG', 'Ardent Militia.JPG', 'Armageddon.JPG', 'Armored Pegasus.JPG', 'Blessed Reversal.JPG', 'Blinding Light.JPG', 'Border Guard.JPG', 'Breath of Life.JPG'] >>> total = 0 >>> for filename in os.listdir('C:\\aaa\\bbb\\ccc'): total = total + os.path.getsize(os.path.join('C:\\aaa\\bbb\\ccc', filename)) >>> print(total) 338856
open(), read() 함수
파일을 불러오려면 open() 함수를 사용합니다. 기본적으로 파일을 open하면 읽기 모드로 열립니다. 파일을 열때 저정할 수 있는 옵션은 r : 읽기 모드, w: 쓰기 모드, a: 추가 모드가 있습니다. 파일을 불러온 다음에 파일의 내용을 읽으려면 read() 메서드를 사용합니다.
aaa 라는 폴더에 AAA.txt 파일이 있다고 가정을 해보겠습니다.
>>> import os >>> myFile = open('C:\\aaa\\AAA.txt') >>> myFile = myFile.read() >>> myFile '읽기 전용으로 파일 열기'
readlines() 함수
readlines() 함수를 사용하면 불러오기를 한 파일이 여러줄에 입력되어 있는 문서일 경우 행마다 구분된 목록으로 반환할 수 있습니다.
>>> myFile = open('C:\\aaa\AAA.txt') >>> myFile = myFile.read() >>> myFile '첫째줄\n두번째줄\n세번째줄
\n' >>> myFile = open('C:\\aaa\\AAA.txt') >>> myFile.readlines() ['첫째줄\n', '두번째줄\n', '세번째줄
\n']
위에서 read() 함수는 전체 문자열이 하나의 목록으로 출력이 되었지만, readlines() 함수를 사용하면 각 목록이 한 행씩 구분된 목록의 형태로 출력이 되게 됩니다.
write() 함수
write() 함수를 사용하면 파일을 불러온 다음에 파일에 쓰기를 할 수 있습니다. 파일에 쓰기를 하려면 open() 함수를 사용 할때 w 모드나 a 모드를 사용해야 합니다. w 모드는 기존의 파일의 내용을 모두 없애고 새로 작성을 하게 되고, a 모드를 사용하면 기존의 파일에 내용을 추가해 줍니다.
>>> myFile = open('C:\\aaa\AAA.txt', 'w') >>> myFile.write('새로운 내용을 입력\n') 11 >>> myFile.close()
>>> myFile = open('C:\\aaa\AAA.txt', 'a') >>> myFile.write('두번째 내용을 추가.') 11 >>> myFile.close() >>> myFile = open('C:\\aaa\\AAA.txt') >>> contents = myFile.read() >>> myFile.close() >>> print(contents) 새 로운 내용을 입력 두번째 내용을 추가. >>>
'Python' 카테고리의 다른 글
파이썬 메일주소 추출하기 (2) | 2024.12.26 |
---|---|
파이썬 정규식 02 (0) | 2024.12.21 |
파이썬 정규식 01 (2) | 2024.12.21 |
파이썬 문자열 다루기 (5) | 2024.12.21 |
파이썬(Python) 딕셔너리 (3) | 2024.11.30 |