프로그램 외부에 저장된 파일을 읽는 방법, sys 모듈 - Python

이찬·2023년 6월 10일
0

Python

목록 보기
3/17
post-thumbnail

- SYS 모듈

  • 파이썬 인터프리터를 제어할 수 있는 방법을 제공

  • 파이썬 인터프리터를 띄워주세요. 인터프리터가 우리의 명령을 기다린다는 뜻으로 >>>를 표시하고 있죠? 도스와 마찬가지로 이것도 프롬프트라고 합니다.

  • sys 모듈을 사용하면 이 프롬프트를 바꿀 수가 있지요.

>>> import sys
>>> sys.ps1  # 현재의 프롬프트는?
'>>> '
> >>> sys.ps1 = '^^; '     # 요걸로 바꿔!
^^; print('hello')
hello
^^; 5 * 3
15
^^;
  • sys.argv
    파이썬을 실행하면서 입력된 파라미터를 전달받아 활용할 수 있는 기능

argv를 출력하면 입력된 arguments를 list 형태로 저장하고 있다. 주의할 점은 항상 첫번째 argument는 실행하는 파일이다. 즉 내가 원하는 입력 argument는 그다음인 argv[1]부터 시작한다

  • sys.path
    파이썬이 설치되어 있는 경로 및 라이브러리들의 경로를 모두 저장하고 있는 변수이다. 라이브러리나 모듈을 인식하지 못해서 설치된 경로를 확인할 때 활용
import sys

if __name__ == '__main__':

    print(sys.path)

sys.path.append("dir") 을 통해 원하는 디렉터리를 실행 path에 추가할 수 있다.

import sys

if name == 'main':

sys.path.append("/my_dir/files")
print(sys.path)

파이썬에서 파일 읽기

  • 파이썬에서는 파일 입출력을 관리하기 위해 open() 함수를 사용

txt 파일 읽기

read()

f = open('test.txt', 'r', encoding='utf-8')
data = f.read()
print(data)
f.close()

# === 실행 결과 ===
# 안녕하세요.
# 오늘은 파이썬 공부를 합니다.
# 열공합시다!

readline()

f = open('test.txt', 'r', encoding='utf-8')

data = f.readline()
print(data)

f.close()

# === 실행 결과 ===
# 안녕하세요.

readlines()

f = open('test.txt', 'r', encoding='utf-8')

data = f.readlines()
print(data)

f.close()

# === 실행 결과 ===
# ['안녕하세요\n', '오늘은 파이썬 공부를 합니다.\n', '열공합시다!\n']
  • open('test.txt', 'r', encoding='utf-8')의 의미:
    test.txt 파일을 r(읽기) 모드로 불러오되, 인코딩은 utf-8 방식으로 불러들인다.

  • open() 메소드의 파일 열기 모드:
    r - read, 읽기 모드
    w - write, 쓰기 모드(모든 내용을 삭제하고 새로 씀. 덮어쓰기에 해당.)
    a - append, 추가 모드(기존 내용에 덧붙임. 이어쓰기에 해당.)

  • 불러온 파일을 담은 변수 f를 활용해 파일의 내용을 가져올 수 있다.
    read() - 전체 내용 그대로 읽어오기
    readline() - 한 줄 내용을 읽어오되, 개행문자도 함께 읽어온다.
    예시의 경우, print()의 개행과 중복되어 개행이 두 번 이루어졌다.
    readlines() - 파일의 내용이 한 줄씩 요소로 들어있는 리스트를 반환한다.

  • open()으로 가져온 파일은 반드시 close() 해주는 편이 좋다.

각 메소드별 전체 파일 내용 읽어오는 방법

# read()는 그 자체로 전체를 읽어오는 메소드이므로 생략함

# readline() 활용
f = open('test.txt', 'r', encoding='utf-8')
while True:
    data = f.readline()
    if data=="": break
    else: print(data, end="")    # print()의 자동 줄 바꿈 방지
f.close()

# readlines() 활용
f = open('test.txt', 'r', encoding='utf-8')
data = f.readlines()
for row in data:
    print(row, end="")    # print()의 자동 줄 바꿈 방지
f.close()

CSV 파일 읽기

import csv

f = open('seoul.csv', 'r', encoding='cp949')
# seoul.csv 파일을 r(읽기) 모드로 불러오되,
# 인코딩은 cp949(Windows 한글 인코딩 default 방식) 방식으로 불러들인다.

data = csv.reader(f, delimiter=',')
# csv 파일을 담고 있는 변수 f를 reader()함수에 넣어 data라는 csv reader 객체 생성
# csv 파일의 데이터를 기호 ,를 기준으로 분리하여 읽어온다.

for row in data:
	print(row)
f.close()
  • delimiter=','를 지정해주지 않아도 reader()의 default delimiter가 기호 , 로 지정되어 있으므로 위 실행 결과와 동일한 결과를 얻을 수 있다.

  • 만약, 원본 파일의 delimiter 설정값과 다른 기호를 delimiter로 지정한다면 아래와 같은 결과가 나온다.
    ['날짜,지점,평균기온(℃),최저기온(℃),최고기온(℃)'] (이하 생략)

profile
Kyunghee univ. IE 21

0개의 댓글