[Python] 파일 읽어오기¶
파이썬은 어떻게 파일에서 데이터를 읽어올까?
파일은 단지 여러 라인으로 구성된 텍스트이다.
파이썬의 기본 입력 메커니즘은 "라인"을 기반으로 한다.
데이터를 텍스트 파일에서 프로그램으로 읽어 들이면 한 번에 한 라인씩 가져온다.
In [2]:
import os
os.getcwd() # 현재 디렉터리 확인
Out[2]:
In [3]:
os.chdir('./Python') # 데이터 파일이 있는 폴더로 이동
os.getcwd() # 현재 디렉터리 확인
Out[3]:
백준 사이트에서 파이썬으로 문제를 풀다보면, 예제 문제를 복사해오기가 까다로워서, 보통은 문제를 txt파일로 저장해서 불러오는 식으로 해결한다.
In [4]:
# text.txt 파일 안에는
# 4 4
# 1 1 1 1
# 1 0 0 1
# 1 1 0 1
# 1 1 1 1
# 이라는 값이 담겨있다. (백준에선 이런 스타일이 대부분이어서 예제로 이걸 가져와봤다.)
my_file = open('test.txt') # 파일을 열어서 my_file라는 파일 객체에 대입
In [5]:
# 파일.readline() 을 사용하면, 한줄 한줄 읽어와서 출력해주는데
print(my_file.readline())
print(my_file.readline())
print(my_file.readline())
print(my_file.readline())
print(my_file.readline())
In [6]:
my_file = open('test.txt')
#예를 들어서, 한 줄만 출력해보자.
my_file.readline()
Out[6]:
my_file.readline() 결과, string이 한 줄 출력되었다.
\n : 줄바꿈
'\n'을 없애줘야 하는데 여러 방법이 있지만, 나는 주로 split()함수를 사용한다.
In [7]:
my_file = open('test.txt')
N,M = map(int, my_file.readline().split()) # N:세로, M:가로
room = [] # 빈 리스트 생성
## 둘 중 하나로, 리스트 만들어주면 된다.
# 1. [int(i) for i in my_file.readline().split()]
# 2. list(map(int, my_file.readline().split()))
for i in range(N):
room.append([int(i) for i in my_file.readline().split()])
print(room)
print('-'*60)
# room을 보기 편하게 출력해보자!
for i in room:
print(i)
- lstrip() : 왼쪽 공백 지우기
- rstrip() : 오른쪽 공백 지우기
- strip() : 양쪽 공백 지우기
In [8]:
# split()대신 strip()관련 함수를 사용해도 될 것 같고
# 오른쪽 \n을 날려주고 싶으니까 rstrip()을 사용해보자.
my_file = open('test.txt')
first_line = my_file.readline()
first_line.rstrip()
Out[8]:
In [9]:
#아니면, 맨 끝에만 제외해주면 되는거니까 문자열의 특성을 이용해도 될 것 같다!
# 방법은 많으니까 때에 따라 데이터에 맞춰서 처리를 해주면 된다.
my_file = open('test.txt')
first_line = my_file.readline()
first_line[:-1]
Out[9]:
In [10]:
# 다시 처음으로 돌아가서..
# 일반적으로 몇 줄 읽어와야되는지 모르는 상태에서 어떻게 읽어올까?
my_file = open('test.txt')
for each_line in my_file: ## for문 사용하니까 easy easy하네!
print(each_line, end="")