Python/os

[Python/os] txt파일 읽어오기

(Python) 파일 읽어오기

[Python] 파일 읽어오기

파이썬은 어떻게 파일에서 데이터를 읽어올까?
파일은 단지 여러 라인으로 구성된 텍스트이다.
파이썬의 기본 입력 메커니즘은 "라인"을 기반으로 한다.
데이터를 텍스트 파일에서 프로그램으로 읽어 들이면 한 번에 한 라인씩 가져온다.


In [2]:
import os
os.getcwd() # 현재 디렉터리 확인
Out[2]:
'C:\\Users\\Juhee\\jupyter_workspace'
In [3]:
os.chdir('./Python') # 데이터 파일이 있는 폴더로 이동
os.getcwd()          # 현재 디렉터리 확인
Out[3]:
'C:\\Users\\Juhee\\jupyter_workspace\\Python'

백준 사이트에서 파이썬으로 문제를 풀다보면, 예제 문제를 복사해오기가 까다로워서, 보통은 문제를 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())
4 4

1 1 1 1

1 0 0 1

1 1 0 1

1 1 1 1
In [6]:
my_file = open('test.txt')

#예를 들어서, 한 줄만 출력해보자.
my_file.readline()
Out[6]:
'4 4\n'

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)
[[1, 1, 1, 1], [1, 0, 0, 1], [1, 1, 0, 1], [1, 1, 1, 1]]
------------------------------------------------------------
[1, 1, 1, 1]
[1, 0, 0, 1]
[1, 1, 0, 1]
[1, 1, 1, 1]
  • lstrip() : 왼쪽 공백 지우기
  • rstrip() : 오른쪽 공백 지우기
  • strip() : 양쪽 공백 지우기
In [8]:
# split()대신 strip()관련 함수를 사용해도 될 것 같고
# 오른쪽 \n을 날려주고 싶으니까 rstrip()을 사용해보자.

my_file = open('test.txt')
first_line = my_file.readline()
first_line.rstrip() 
Out[8]:
'4 4'
In [9]:
#아니면, 맨 끝에만 제외해주면 되는거니까 문자열의 특성을 이용해도 될 것 같다!
# 방법은 많으니까 때에 따라 데이터에 맞춰서 처리를 해주면 된다.

my_file = open('test.txt')
first_line = my_file.readline()
first_line[:-1]
Out[9]:
'4 4'

In [10]:
# 다시 처음으로 돌아가서.. 
# 일반적으로 몇 줄 읽어와야되는지 모르는 상태에서 어떻게 읽어올까?

my_file = open('test.txt')
for each_line in my_file:  ## for문 사용하니까 easy easy하네!
    print(each_line, end="")
4 4
1 1 1 1
1 0 0 1
1 1 0 1
1 1 1 1