본문 바로가기
파이썬/데이터 다루기

[240911] 파이썬#09 파일 읽고 쓰기, 워드 클라우드 그리

by 황오독 2024. 9. 11.

1. 파일 읽고 쓰기

 

1) 경로 확인 : 사용자마다 파일을 저장하고 읽는 기본 경로를 '홈 디렉터리'

   - pathlib 패키지의 Path.home() 함수로 사용자 홈 디렉터리를 확인한다.

# 홈 디렉터리 확인
from pathlib import Path
print(Path.home())

# 출력 결과
C:\Users\User

 

  - pathlib 패키지의 Path.cwd() 함수로 현재 작업 디렉터리를 확인한다.

# 작업 디렉터리 확인
from pathlib import Path

print(Path.cwd())

# 출력 결과
C:\Users\User\Python

 

2) 파일 읽고 쓰기

  ① 쓰기 : w 모드로 파일을 열어 wirte() 메서드로 파일에 기록한다.

    - 이미 같은 이름의 파일이 있다면 제거되고 새 파일이 만들어진다.

# 파일 열기
f = open('MyFile.txt', 'w')

# 파일 쓰기
f.write('안녕하세요?\n')

# 파일 닫기
f.close()

  - 새로운 디렉터리 만들기 : mkdir()

    - exist_ok=Ture를 지정하면 이미 폴더가 있는 경우, 해당 폴더를 사용한다.

# 디렉터리 만들기
Path('Files').mkdir(exist_ok=True)

 - 경로를 지정하여 특정 디렉터리 안에 파일을 만든다. ('/' 사용)

# 파일 열기
f = open('Files/MyFile.txt', 'w')

# 파일 쓰기
f.write('모두들 안녕하세요?\n')

# 파일 닫기
f.close()

 

② 파일 읽기

# 파일 열기
f = open('MyFile.txt', 'r') # 경로를 지정할 경우 f = open('Files/MyFile.txt', 'r')

# 내용 읽기
print(f.read())

# 파일 닫기
f.close()

 

③ 파일 내용 추가

   - a 모드로 파일을 열어 write() 메서드로 내용을 추가한다.

# 파일 열기
f = open('MyFile.txt', 'a')

# 내용 추가
f.write('만나서 반갑습니다!')

# 파일 닫기
f.close()

# 추가된 내용 확인
# 파일 열기
f = open('MyFile.txt', 'r')
print(f.read())
f.close()

# 출력 결과
안녕하세요?
만나서 반갑습니다!

 

** 같은 이름의 파일이 있어 오류가 나는 것에 대해 핸들링을 한다.

# 오류 핸들링
try:
    f = open('MyFile.txt', 'x')
    f.write('만나서 반갑습니다!')
    f.close()
except FileExistsError:     #  이미 파일이 있으면
    print('같은 이름의 파일이 있습니다.')
else:                       # 그렇지 않으면
    print('파일 쓰기 성공했습니다.')
finally:                    # 마무리
    print('수고하셨습니다.')
    
    
# 출력 결과
같은 이름의 파일이 있습니다.
수고하셨습니다.

 

2. 워드 클라우드 그리기

# 라이브러리 불러오기
import numpy as np
from PIL import Image

# 이미지 불러오기
masking_image = np.array(Image.open('human.jpg'))

# 워드 클라우드 만들기
wordcloud = WordCloud(font_path = 'C:/Windows/fonts/HMKMRHD.TTF',
                      width=2000,
                      height=1000,
                      mask=masking_image,
                      background_color='white').generate_from_frequencies(wordCount)

# 표시하기
plt.figure(figsize=(12, 6))
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad=0)
plt.show()