2023년 6월 업데이트

 

안녕하세요. SQLER의 코난 김대우입니다. 

이번 강좌에서는, Python 중급 강좌 - 7. 파일작업(File read/write)을 진행토록 하겠습니다.

 

SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록

 

코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 실행하시면 됩니다.

예를 들어, 7_files.py를 생성하고 코드를 실행합니다.

 

 

 

TL;DR

파일작업은 파일 읽기 또는 쓰기를 위해 스트림 개체를 사용하여 수행됩니다. 파일 읽기 작업에는 파일을 읽을 수 있는지 체크하고, 캐릭터나 개별 라인은 물론 파일의 모든 라인을 읽는 작업이 포함됩니다. 또한, JSON 파일을 읽어 dictionary 데이터형으로 변환하고, CSV 파일을 읽고 pandas DataFrame으로 저장하는 방법도 설명합니다.
 

 

Python 중급 강좌 - 7. 파일작업(File read/write)

이번 강좌는 파일작업입니다. 실제로, 파일을 읽고 쓰는 과정과 여러 팁을 이번 강좌에서 진행합니다.

 

Stream 개체를 이용해 파일처리

파일을 열 때에는 이렇게 stream 개체를 만들어 처리합니다.

아래의 이미지와 같이, 파일을 읽기 목적으로 쓸지 아니면 쓰기 목적으로 열기 등을 결정해 진행합니다.

Slide2.JPG

기본 옵션은 이렇게 읽기(Read)이고, 텍스트(Text) 파일을 읽고 처리합니다.

 

파일 읽기(file read)

다음 Python 코드를 통해 파일 읽기 작업을 수행할 수 있습니다.

# demo.txt 파일을 열고, 내용을 읽음 
# clone 한 more-python-for-beginners/07 - Reading and writing files/demo.txt 파일 참조
stream = open('./demo.txt', 'rt')

print('\nIs this readable? ' + str(stream.readable()))
print('\nRead one character : ' + stream.read(1))
print('\nRead to end of line : ' + stream.readline())
print('\nRead all lines to end of file :\n' + str(stream.readlines())+ '\n')

 

파일 쓰기(file write)

다음과 같은 코드로 파일 쓰기 작업을 진행합니다.

# 쓰기 작업을 하기 위해 output.txt를 텍스트 파일로 열고 객체를 가져옴
stream = open('output.txt', 'wt')

print('\nCan I write to this file? ' + str(stream.writable()) + '\n')

stream.write('H') # 한 줄 문자열 작성 
stream.writelines(['ello',' ','world']) # 여러 줄의 문자열 작성
stream.write('\n') # 새 줄(new line) 작성

names = ['Susan','Christopher']
stream.writelines(names)

# 리스트의 각 항목 사이에 새 줄을 추가하는 깔끔한 방법
stream.write('\n')  # 새 줄 작성
stream.writelines('\n'.join(names)) 
stream.close() # 파일 스트림을 flush 하고 close

 

 

파일 스트림 작업

파일 작업 시 Stream 작업이 약간 생소할 수 있습니다. seek 명령을 이용하면, 현재 스트림의 작업 위치를 변경하고, 필요한 작업을 수행할 수 있습니다. flush는 이런 stream을 파일로 실제 쓰는 처리 과정을 flush 작업이라고 부릅니다.

# 텍스트 쓰기 작업을 위해 manage.txt 파일 객체를 가져옵니다.
stream = open('manage.txt', 'wt')

# 파일스트림에 demo 단어를 작성
stream.write('demo!')

# 파일스트림의 시작 위치로 이동
stream.seek(0)

# cool 단어를 파일시스템에 작성
stream.write('cool')

# 파일 버퍼로 파일스트림 콘텐츠를 flush(플러시) - 실제 파일로 쓰기
stream.flush()

# 파일스트림을 flush 하고 파일 close
stream.close()

 

 

Python에서 빈(empty) 파일 생성

추가적으로, 가끔 빈 파일을 만들어야 할 경우가 있습니다. pathlib에서 touch()를 이용하면 편리합니다. bash 명령과 유사하죠.

from pathlib import Path

# 현재 디렉토리에 빈 파일을 생성
Path('file.txt').touch()

 

 

Python에서 파일을 줄단위(line by line)로 읽어 list에 저장하는 다른 방법

위에서 간략한 방법도 소개하고 있지만, 워낙 자주 쓰이는 처리라서 잘 정리해 두시면 좋습니다.

filename = 'output.txt'
with open(filename) as f:
    content = f.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content]

print(content)

이렇게 readlines()를 이용해 list로 append 할 수 있습니다.

참고링크 : python - How to read a file line-by-line into a list? - Stack Overflow

 

Python에서 json 파일을 읽어 dictionary 데이터형으로 저장하는 방법

import json 
f = open('JSON_FILENAME.json',)   # 예시 파일명입니다.
data = json.load(f)  # data는 dict로 리턴됩니다.

이렇게 dict로 로드할 수 있습니다. 이후 JSON 탐색 등은 이전 SQLER의 강좌를 참고하세요.

개발자 커뮤니티 SQLER.com - Python 초급 강좌 목차 - 17. JSON 데이터 처리

 

Python에서 CSV 파일을 읽어서 pandas DataFrame으로 저장하는 방법

# pip install pandas로 설치
import pandas as pd
titanic_data = pd.read_csv('CSV_FILE.csv')  # 예시 파일명입니다.
# df를 CSV로 저장할 경우 to_csv()로 저장

 

☑️ 챗GPT 활용: python pandas DataFrame에 대해서 알려줘

 

CSV를 로드해 pandas DataFrame으로 처리하는 상세한 방법은, 이후 머신러닝 강좌에서 진행 예정이니 도움 되시길 바랍니다.

 

수고하셨습니다.

 

파이썬 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 파이썬 & 머신러닝 코딩 마스터 

파이썬-책구매링크.png

 

참고자료

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝

c9-python-getting-started/more-python-for-beginners/07 - Reading and writing files at master · CloudBreadPaPa/c9-python-getting-started (github.com)

python - How to read a file line-by-line into a list? - Stack Overflow

 

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 33952
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 17162
118 오픈소스 소통을 위한 Git 공부하기 | ep6. 내 저장소에 소스를 푸시하기 위한 Fork | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.02 74
117 오픈소스 소통을 위한 Git 공부하기 | ep5. 브랜치 (Branch) 이해하기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.01 45
116 오픈소스 소통을 위한 Git 공부하기 | ep4. 변경 단위를 만들기 위한 Commit | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.31 44
115 오픈소스 소통을 위한 Git 공부하기 | ep3. 소스를 가져오기 위한 Clone | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.30 59
114 오픈소스 소통을 위한 Git 공부하기 | ep2. Git를 소개합니다 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.28 52
113 오픈소스 소통을 위한 Git 공부하기 | ep1. 버전 관리의 중요성 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.27 55
112 오픈소스 소통을 위한 Git 공부하기 | ep0. 인트로 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.24 110
111 Azure VM - 오픈소스 ROS Gazebo Web 설치 및 실행 file 코난(김대우) 2022.10.19 153
110 parquet 파일의 meta 정보 추출 코난(김대우) 2021.11.16 1127
109 embedded SQL - GlueSQL, rust 기반 오픈소스 프로젝트 file 코난(김대우) 2021.10.22 453
108 대규모 머신러닝 프로젝트 Serving에 사용되는 Python WAS, ASGI - uvicorn file 코난(김대우) 2021.10.06 1009
107 Apache Arrow 리뷰 file 코난(김대우) 2021.10.05 2046
106 autopep8을 이용한 python 린트(linting) 구현 코난(김대우) 2021.09.15 684
105 Python에서 환경변수(environment variable) 처리 코난(김대우) 2021.09.15 252
104 Python에서 random 문자열이나 숫자 가져오는 방법 코난(김대우) 2021.09.15 965
103 Python 중급 강좌 - 9. 비동기 작업(Asynchronous operations): asyncio 코난(김대우) 2021.01.03 760
102 Python 중급 강좌 - 8. 외부 리소스 관리(Managing external resources): with 코난(김대우) 2021.01.03 420
» Python 중급 강좌 - 7. 파일작업(File read/write) file 코난(김대우) 2021.01.03 1419
100 Python 중급 강좌 - 6. 파일시스템(File system) 관리 코난(김대우) 2021.01.03 667
99 Python 중급 강좌 - 5. 다중상속(Mixins - multiple inheritance) 코난(김대우) 2021.01.03 492





XE Login