Python

[Python] Open file

언킴 2021. 9. 30. 16:08
반응형

파이썬에서 분석을 하기 위해서는 데이터가 필요하다. 파이썬 패키지 내의 내장된 데이터셋을 활용하여 분석을 할수도 있지만, 직접 데이터를 호출해 분석하는 일이 생길 것이다. 그럴때 패키지를 다운받지 않고도 파일을 불러오는 방법에 대해서 알아보자.

 

파일을 불러오는 패키지로 대표적인 패키지는 pandas가 있단는 것을 알고 있다. 하지만 여기서는 패키지가 아닌 내장함수 open에 대해서 다루어 볼 것이다. 다음에 있는 open 함수 내의 method를 하나하나 뜯어보자.

 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

 

  • file
    • 우리가 불러오고자 하는 파일의 위치를 적어주어야 한다. e.g. ) c:/users/ok-lab/data.csv 
  • mode 
    • a : 우리가 그 전에 일정 지점까지 작성을 했다면 그 파일에 추가로 작성하고 싶을때 사용한다.
    • r : 파일을 읽을 때 사용한다.
    • w : 파일ㅇ을 쓸 때 사용한다.
  • encoding
    • 인코딩으로 주로 사용되는 값들은 다음과 같다. 'euc-kr', 'cp949', 'utf-8'

 

 

 

우리가 주로 사용하는 open 함수 내 인자들은 위와 같다. mode의 종류에는 'x', 't', '+' 등 여러가지가 더 존재하지만 자주 사용하지 않기 때문에 자주 사용하는 인자들로만 구성해보았다. 위 코드를 보면 file에는 등호가 없는 것을 볼 수 있다. 그말은 즉, file은 필연적으로 작성을 해주어야 한다는 것이다. 나머지 인자의 등호 뒤에 있는 값들은 default 값이라 지정해주지 않으면 default값으로 실행이 된다. 

 

 

open 함수의 구성에 대해서 간단히 알아봤으니 이제 파일을 불러오는 법을 확인해보자. 일반적으로 해당 폴더로 파일을 옮겨두고 open에서 파일의 이름을 적어주어 파일을 불러들이는 방법이 있고, 웹 사이트 주소에서 해당 파일을 가져오는 방법도 있을 것이다. 

 

 

# wget package를 install 한다.
!pip install wget

# wget 을 import 한다
import wget 

# url 웹 사이트의 html file을 불러온다.
url = r'https://www.naver.com'
wget.download(url)



####################################
# colab config 일 경우 

!wget https://www.naver.com/

 

위 코드는 naver의 html 코드를 가져오는 코드다. 만약 깃허브나 원하는 곳에 다운로드 받을 파일이 있다면 이렇게 불러와서 호출할 수 있을 것이다. 파일을 다운받았으니 이제 불러오는 코드를 작성해보자.

 

f = open('file_name')

 f 라는 변수에 open('file_name')을 지정해주는 것이다. file_name에는 저장된 파일의 이름을 작성해주면 된다. 그럼 이제 f 라는 변수에 사용할 수 있는 변수는 여러가지가 존재한다.

  • read : 파일을 읽어온다.
  • readline : 파일을 한 줄 씩 읽어온다. ( enter 포함 )
  • readlines : readline을 한줄한줄 계속 읽어서 for문으로 불러온다.
  • writelines : 한줄한줄씩 읽어온다. readlines와 비슷 

 

# file을 읽는다. 
f.read()


f.read()

# f.read()를 한 번 더 실행하면 '' 아무것도 없는 것을 확인할 수 있다.

위와 같이 f.read()를 하게되면 file에 있는 내용이 한 번에 출력되고, 그 다음 다시 read()를 하게 되면 '' 공백이 출력이 된다. 왜 그렇게 될까?

 

여기서 read의 의미를 한 번 생각해보면, read는 말 그대로 읽는 것이다. 한 번 읽고 나면 file의 header는 해당 파일의 끝지점에 머물게 된다. 거기서 다시 read를 하게되면 끝에서 끝까지 더이상의 문자가 없기 때문에 공백을 읽을 수 밖에 없다. 그렇기 때문에 파일을 다시 실행하거나, 혹은 seek(0)을 사용해서 header의 위치를 맨 앞으로 옮겨주는 방법을 사용할 수 있다.

 

# 1
f = open('file_name')
f.read()


# 2
f.seek(0)
f.read()


# f.tell()
# 현재 head가 어디에 가있는지 확인할 수 있다.
f.tell()

 

 

텍스트 형태로 데이터를 다룰때에는 위와 같이 read로 불러와 전처리과정을 통해 분석하는 것이 편하다. 하지만 위 처럼 텍스트 형태가 아니라 csv나 excel, table 등으로 되어있는 파일인 경우에는 같은 방식으로 하게되면 어렵다. 그렇기 때문에 한 줄 씩 불러와서 table의 해당 위치에 각각 배치시켜주는 방식으로 파일을 불러와야한다. 

 

f.seek(0)

l = f.readline()
l


l.strip()

다시 처음부터 head를 지정해주고, html 웹 파일을 한 줄 불러오는 과정을 진행했다. 그리고 파일을 출력해보면 마지막에 \n과 공백과 같은 띄어쓰기, 줄바꿈, 탭 등 여러 불필요한 값들이 들어가 있는 것을 볼 수 있다. 해당 문구를 없애기 위해서 strip 함수를 사용해 불필요한 문구들을 제거해주는 과정을 진행했다. 한 줄씩 불러오는 것이 귀찮으니 한 번에 불러와보자.

 

f.seek(0)

l2 = [x.strip() for x in f.readlines()]


# tag가 시작하는 위치를 찾고 싶다면?
for ll in l2:
    if ll.startswith("<"):
    	tagName = ll.strip('<').strip('>').split()[0
        print('this is html tag', tagName)

 

html 을 불러와 간단하게 사용해보았다. 다음에 또 다룰 일이 생긴다면 활용을 해보는 내용도 다룰 예정이다.

 

'Python' 카테고리의 다른 글

[Python] ConnectionResetError (request)  (0) 2022.04.27
[python] os, os.path로 파이썬 경로 다루기  (0) 2022.04.01
request <Response [401]>  (0) 2022.03.11
[Python] Class  (0) 2022.01.14
[Python] tuple  (0) 2021.06.25