파일 입출력
: 파일을 열어서 텍스트를 읽고, 쓰고, 수정
: 파일 처리 모드의 종류
모드 | 의미 | 설명 |
r | 읽기 모드 | 파일 객체를 읽기 모드로 생성 파일의 처음 위치로 포인터를 이동 |
w | 쓰기 모드 | 파일을 쓰기모드로 연다 파일에 데이터를 쓰면 기존 파일의 내용은 모두 사라짐 주어진 파일이 존재하지 않으면 새로운 파일을 만듬 |
x | 쓰기 전용 | 새 파일 쓰기 모드로 연다 주어진 이름의 파일이 존재하면 에러가 발생한다 |
a | 추가 모드 | 파일을 추가 모드로 연다 기존 파일의 내용의 끝에 새 내용을 추가하여 기록 |
+ | 갱신 모드 | 파일을 읽기와 쓰기가 모두 가능한 모드로 연다 |
파일 쓰기
1. 파일 명으로 파일을 생성 후 write 함수를 활용해 내용 작성 가능
- 디렉토리 경로 없이 파일명만 적은 경우 현재 파이썬이 실행되는 경로에 파일이 생성된다.
#os라는 모듈을 활용해 현재 디렉토리 경로 확인 가능
import os
os.getcwd()
'C:\\Users\\sputnik\\Python'
#a란 파일을 쓰기모드로 열고 1234를 입력후 닫음
f = open("a.txt", "w")
f.write("1234")
f.close()
2. 특정 경로에 파일을 생성하고 있을 때는 전체 경로 및 파일명 입력
- \는 이스케이프 문자로 경로 설정시 주의할 것!
f = open("C:\\Users\\sputnik\\Python\a.txt", "w") #\를 \\로 해야 유니코드 에러가 안난다.
f = open("C:\\Users\\sputnik\\Python\\a.txt", "w") #\를 \\로 해야 유니코드 에러가 안난다.
f.close() #항상 열었으면 닫는걸 원칙으로 하자.
3. w모드일 경우 파일을 새로 생성하며, 기존에 파일이 있다면 덮어쓰기 때문에 기존 내용이 사라짐
# w모드는 기존에 파일이 있으면 기존내용을 지우고 새로 쓴다.
f= open("a.txt", "w")
f.write("1234")
f.close()
f= open("a.txt", "w")
f.write("5678")
f.close()
4. 기존 파일에 새로운 내용을 추가하기 위해서는 a모드를 사용
- 해당 파일명으로 파일이 없더라도 a모드로 생성이 가능하다.
f = open("a.txt","w")
f.write("1234")
f.close()
f = open("a.txt", 'a')
f.write("5678")
f.close()
5. 새로운 파일을 쓰기 위해 x모드도 사용 가능
- w모드와 기능은 똑같지만, x모드는 기존 파일이 있다면 오류 발생(덮어쓰기 방지)
#w모드와 기능은 똑같지만, x모드는 기존 파일이 있다면 오류 발생(덮어쓰기 방지)
f = open("a.txt", 'x')
f.write("1234")
f.close()
f = open("b.txt", 'x')
f.write("1234")
f.close()
6. 여러줄의 내용을 입력하는 방법
- 여러 줄 문자열 사용(따옴표 세개)
- 개행(\w) 문자 사용
#여러줄 내용 입력
f = open("a.txt", "w")
f.write("""1234
1234""")
f.close()
f = open("b.txt", 'w')
f.write("1234\n1234")
f.close()
7. 리스트, 튜플 등의 내용을 입력하는 방법
- writelines() 함수 사용
#리스트, 튜플 등의 내용을 입력
t = ("1","2","3","4","\n")
l = ["5","6","7","8"]
f = open("a.txt", 'w')
f.writelines(t)
f.writelines(l)
f.close()
추가
파일 읽기
1. r모드로 파일 열기, read() 함수로 파일의 전체 내용 불러오기
- 읽으려는 파일이 없으면 오류가 발생
f = open("a.txt", 'r')
print(f.read())
f.close()
1234
5678
f = open("c.txt", 'r') #파일이 없으면 에러가 난다.
2. readline() 함수로 파일의 내용을 한 줄씩 가져올 수 있음
- 더 이상 읽을 줄이 없다면 None()을 반환
- while + if 제어문을 사용하여 모든 줄 출력 가능
f = open("a.txt",'r')
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
1234
5678
f = open("a.txt",'r')
while True:
line = f.readline()
if not line:
break
print(line)
f.close()
1234
5678
3. readlines() 함수로 파일의 내용을 리스트로 가져올 수 있음
: 주로 반복문과 함께 사용해 한 줄씩 리스트의 요소로 가져와 활용
f = open("a.txt", 'r')
print(f.readlines())
f.close()
['1234\n', '5678']
4. 파일 입출력의 활용
4.1 파이썬의 표준 출력은 print() 함수를 활용해 파이썬 쉘 환경(콘솔)에 출력
- 파이썬의 sys모듈을 활용해 표준 출력을 파일로 전환 가능
- sys.stdout: 표준 출력
- sys.stdin : 표준 입력
#참고
import sys
f = open("a.txt", 'w')
sys.stdout = f
print("1234")
f.close()
4.2 로그, 에러 등을 기록할 때 활용이 가능
- 표준 출력을 잠시 다른 변수에 저장해두고 필요할 때 콘솔로 되돌려서 사용가능
4.3 다른 자료형의 파일 입출력
- 기존 파일 입출력은 단순 텍스트만 파일로 입출력 가능
import sys
f = open("a.txt", 'w')
f.write("[1,2,3]")#리스트
f.close()
f=open("a.txt", 'r')
a = f.read()
f.close()
print(a)
print(type(a))
[1,2,3]
<class 'str'>
import sys
f = open("a.txt", 'w')
f.write("{'a':1, 'b':2}")#사전자료형
f.close()
f = open("a.txt", 'r')
a = f.read()
f.close()
print(a)
print(type(a))
{'a':1, 'b':2}
<class 'str'>
- 다른 자료형의 객체 형태로 그대로 유지하면서 파일을 저장하기 위해 pickle 모듈 사용
pickle 모듈로 파일을 저장할 때는 바이너리 형식으로 입출력해야함(wb, rb모드)
#피클
import pickle
f = open("a.txt", "wb")
data = {1:'python', 2:'you need'}
pickle.dump(data, f)# f에 이 데이터를 넣어줘
f.close()
# 이렇게만 출력하면 바이너리 코드로 출력되서 에러
import pickle
f = open("a.txt","rb")
data_read = pickle.load(f)
f.close()
print(data_read)
print(type(data_read))
{1: 'python', 2: 'you need'}
<class 'dict'>
파일 다루기
시스템의 환경 변수, 디렉토리, 파일 등을 제어할 수 있는 파이썬의 OS모듈을 활용
listdir() 함수로 해당 디렉토리의 파일 목록 반환
-- .은 상대경로로 현재 디렉토리를 의미
-- ../ 는 부모 디렉토리를 의미
1. listdir() 함수로 현재 폴더의 파일이나 디렉토리 조회
import os
print(os.listdir('.'))#현재 폴더의 파일 조회
import os
print(os.listdir('../'))#부모 디렉토리 조회
2. rename() 함수로 파일 이름 변경이 가능
#rename()함수로 파일 이름 변경 가능
import os
print(os.listdir('.'))
os.rename('a.txt', 'd.txt')# a.txt를 d.txt 로 변경
print(os.listdir('.'))
3. path.exists() 함수로 파일의 존재 유무 확인
#exists()함수로 파일의 존재 유무 확인
import os
print(os.path.exists('a.txt'))
print(os.path.exists('b.txt'))
4. path.abspath() 함수로 파일의 존재 유무와 관계없이 해당 파일의 절대 경로를 반환
- 파일이 없어도 생성 가능하므로, 파일을 입력할 때 주로 활용
#path.abspath() -- 파일이 없어도 생성 가능하므로, 파일을 입력할 때 주로 활용
import os
print(os.path.exists('a.txt'))
print(os.path.abspath('a.txt'))#파일이 없더라도 파일을 생성
5. path.basename, dirname, split 함수로 해당 파일의 파일명과 경로명을 분리.반환이 가능
- 파일명과 파일의 경로명을 따로 분리 가능
- 환경마다 위치가 다를 경우 자주 활용
예) 모두 다른 경로에 있는 파일들의 목록을 가져오거나, 새로운 파일을 만들 경우 사용
#path.basename, dirname, split 함수로 해당 파일의 파일명과 경로명을 분리.반환이 가능
import os
print(os.path.basename("C:\\Users\sputnik\\Python\\b.txt"))#파일명 반환
print(os.path.dirname("C:\\Users\sputnik\\Python\\b.txt"))#디렉토리명 반환
print(os.path.split("C:\\Users\sputnik\\Python\\b.txt"))#튜플형태로 디렉토리와 파일을 구분해 반환
b.txt
C:\Users\sputnik\Python
('C:\\Users\\sputnik\\Python', 'b.txt')
6. path.splitdrive, splitext 함수로 해당 파일 경로의 드라이브, 확장자를 분리.반환이 가능
- 저장된 드라이브가 다르거나, doc, docx 처럼 확장자가 다를 경우 자주 활용
#path.splitdrive, splitext 함수로 해당 파일 경로의 드라이브, 확장자를 분리.반환이 가능
import os
print(os.path.splitdrive("C:\\Users\sputnik\\Python\\b.txt"))
print(os.path.splitext("C:\\Users\sputnik\\Python\\b.txt"))
디렉토리 다루기
시스템의 환경 변수, 디렉토리, 파일 등을 제어할 수 있는 파이썬의 OS 모듈을 활용
1. getcwd() 함수로 현재 작업 중인 디렉토리를 반환
- cwd : Current Working Directory의 약자
#getcwd()함수로 현재 작업중인 디렉토리 반환
import os
print(os.getcwd())
C:\Users\sputnik
2. chdir() 함수로 현재 작업중인 디렉토리 경로를 변경
- chdir : Change Directory의 약자
- 파일 입출력 코드가 모두 상대 경로로 코딩되어 있는 경우 작업 환경이 달라지면 오류가 발생할 수 있음
그래서 작업 디렉토리 경로를 적절하게 변경하여 활용할 때 쓰임
#chdir() 함수로 현재 작업중인 디렉토리 경로를 변경
import os
os.chdir("C:\\Users\sputnik\\Python\\")
print(os.getcwd())
C:\Users\sputnik\Python
3. mkdir() 함수로 새로운 폴더 생성
- mkdir : Make Directory의 약자
#mkdir() 함수로 새로운 폴더 생성
import os
os.mkdir("kc")
print(os.path.exists("kc"))
True
[참고]
mkdir() : 경로의 제일 마지막에 적힌 하나의 폴더만 생성
makedirs() : 시작부터 끝까지 모든 폴더를 생성
import os
os.mkdir("c\\temp1\\tem2") # temp1 이 있거나 없다면 에러가 남
import os
os.makedirs("c\\temp1\\tem2") # 전체 폴더를 생성해줌. 다만 재실행했을 때 폴더가 있다면 에러가 남
rmdir() / removedirs() : 폴더를 삭제. c:의 모든 자료를 실수로 날려먹을 수 있으므로 주의
'AI > StudyNote' 카테고리의 다른 글
Python #지역변수 #전역변수 #매개변수 (0) | 2021.09.02 |
---|---|
Python #함수 (0) | 2021.09.01 |
Python #리스트 내포 (0) | 2021.08.31 |
Python #while (0) | 2021.08.31 |
Python #for (0) | 2021.08.31 |