python os함수

강정우·2022년 7월 18일
0

python

목록 보기
7/13
post-thumbnail

파이썬 파일 다루기

1. open method

  • open method를 배우는 이유 : 나중에 모든 data file 및 module을 file로써 제공. 따라서 기본적으로 파일을 읽고 쓸 줄 알아야함.
  • f=open() <= 객체 생성 f.close()가 없다면 삭제, 옮김, 수정등이 안 됨..

1.open

  • open("파일명, '모드') : 파일 객체를 사용하게 위해 연다.
  • close(): 파일을 닫는다. => 반드시 닫아줘야 나중에 다음과 같은 에러가 안 뜸.
  • 파일 쓰기 / 파일객체 옵션
    r : read(읽기)
    w : write(쓰기)
    a : append(추가 쓰기)
    write() : 해당 파일 내용을 쓴다.
  • 문법
filename = "./data/test.txt"

# 쓰기위해서 파일 객체를 연다.
f = open(filename,'w')

# 파일에 내용을 쓴다.
f.write("Hello\nHow r u\ni'm under tha wartha")

# 파일을 닫는다.
f.close()

2. read함수

  • 가장 중요함 : 파일에 들어있는 인코딩 방식이나 이런것들이 다 다르기 때문이다.

1) readline() : 파일에서 한줄을 읽는다 (첫 줄만 필요할 때 사용)

  • 문법
#파일 한 줄씩 읽기
filename = "./data/test1.txt"

# 파일객체를 읽기위해 연다.
f = open(filename, 'r')

# 첫 줄만 읽기
line = f.readline()

print(line)

# 항상 닫아주기!!
f.close()

#result
## Hello 
  • while 문 + readline() 함수로 read()와 비슷한 성능 내기.
# readline() 함수를 이용하여 전체 줄 읽기
f = open(filename, 'r')

while(True):
    line = f.readline()
    
    # 읽을 줄이 없다면 반복문 중지
    if not line:
        break
   
    print(line, end = "")
    
f.close()

2) readlines() : 파일을 한줄씩 읽어서 리스트에 저장하여 반환 (데이터 분석을 위해 사용)

  • 문법
f= open(filename,'r')
lines = f.readlines()
for line in lines:
    print(line, end='')
f.close()
  • 왜? end='' 인가?
  • readlines() 의 특징 : 한 행마다 전부 배열에 저장한다.
  • 이 배열을 기반으로 데이터 분석, text-mining을 진행할 수 있다.
# 여러줄 읽기
f = open(filename, 'r')

# 여러 줄을 읽어서 한줄씩 list에 저장.
lines = f.readlines()

lines
f.close()
  • 왜? end='' 인가?
    ['Hello\n', '우리는 spring반입니다.'] 처럼 \n의 개행문자가 자동으로 들어있기 때문이다.

3) read() : 전체 파일을 읽는다.

  • 문법
f= open(filename,'r')
data = f.read()
print(data,end="")
f.close()
# 전체 파일 내용 한번에 읽기
f=open(filename,'r')

data = f.read()

print(data, end='')

f.close()
  • read()함수는 문자열로 반환!!
    보통 변수를 하나 선언해서 거기에 객체.함수를 집어 넣는다.

3. append 모드

  • 문법
# 파일 내용을 추가하기(쓰기) 위해 연다.
f=open(filename,'a')

# for문을 돌면서 10번 추가하겠다.
for i in range(1,10):
    f.write(f"\nSpring반 {i}번 파이팅!")

f.close()
  • 만일 계속 실행해서 계속 추가한다면 계속 추가됨.

4. with as

  • close()를 깜빡하고 쓰지 않아도 파일 객체를 닫을 수 있다.
with open(filename,'r') as f:
    data = f.read()
    print(data)
  • with 함수를 쓰고 나서 파일객체를 불러오면 error가 발생한다.

2. os. method

1. os.path.exist()

  • 폴더나 파일이 있는지 확인하는 함수.
import os.path

filename = "./data/test1.txt"

# 해당 파일이 있다면:
if os.path.exists(filename):
    # 덮어쓰지 않고 출력을 하겠다.
    print("동일한 파일명이 있습니다.")
else:
    f = open(filename,'w')
    f.write("Hello\n우리는 spring반입니다.")
    f.close()

2. os.listdir

  • 폴더 내의 폴더와 파일 목록을 반환(list directory의 준말)
  • 문법
import os

path = "C:/Users/AI_school/anaconda3/envs/data"

# 해당 폴더의 파일들을 리스트로 반환
filenames = os.listdir(path)

print(filenames)

# 폴더명까지 출력
for filename in filenames:
    # join : 문자열 연결함수 (파일, 경로연결)
    full_path = os.path.join(path, filename)
    
    print(full_path)
  • 경로 설정 시 주의사항 unicode error가 뜰 수 있음 이땐
    /, \, \\ 요거 3개 다 돌려가면서 해봐야함.

3. os.remove

  • 해당 파일을 삭제
  • 이때 무지성으로 삭제하기 보단 앞서 배운 os.path.exist 함수와 함게 존재한다면 삭제하는 함수를 만들면 좋다.
import os
filename = "C:/Users/AI_school/anaconda3/envs/data/test1.txt"

# 해당 파일이 있는지 확인
if os.path.exists(filename):
    os.remove(filename)
else:
# 파일이 없는 경우에는 에러를 발생
    print("해당 파일이 없습니다.")
# os.remove(path)

4. os.mkdir

  • 해당 폴더를 생성(make directory의 준말)
path = "C:/Users/AI_school/anaconda3/envs/data/test777"

if not os.path.exists(path):
    os.mkdir(path)
    
else:
    print("해당 폴더가 존재합니다.")
  • os.path.exist 함수를 통해 폴더가 없다면 만들겠다는 코드로 짜보았다. 왜냐면 안그러면 error나 중복이 되어버리기때문이다.

5. os.rmdir

  • 해당 폴더를 삭제(remove directory의 준말)
# 만약 폴더가 있다면
path = "C:/Users/AI_school/anaconda3/envs/data/test777"

if os.path.exists(path):
    os.rmdir(path)
else:
    print("해당 폴더가 없습니다.")

추가공부

  • 자바관련 파일시스템은 조금 복잡함. (추후 추가 공부 필요.)
  • os.path에 무슨무슨 함수들이 붙어있는지 공부할 것
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글