본문 바로가기

AI/StudyNote

Python #파일 입출력 #파일 다루기 #폴더 다루기

파일 입출력

 

: 파일을 열어서 텍스트를 읽고, 쓰고, 수정

 

: 파일 처리 모드의 종류

모드 의미 설명
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()

x 모드일 때 a.txt파일이 없다면 에러

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()

 

 

추가

출처: https://wikidocs.net/26

 

출처: https://wikidocs.net/26


 

파일 읽기

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