개요
오늘은 request를 이용해서 csv 파일을 가져와보도록 하겠습니다.
발단 : wget 사용불가
요즘 배우는 머신러닝 예제 중, wget을 이용해서 csv를 다운로드 받아야 하는 부분이 있었습니다. 그래서 우선 wget을 이용해 보기로 했습니다.
wget 기본구문
import wget
print('Beginning file download with wget module')
url = 'http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg'
wget.download(url, 'cat4.jpg')
wget은 매우 간단했습니다. 위의 스크린 캡쳐는 왜 !wget인지 잘 모르겠지만. 순서는 다음과 같이 볼 수 있습니다.
-
라이브러리를 임포트한다
-
인터넷상의 url을 지정한다
-
로컬로 다운로드한다.
위의 예제는 작동합니다.
wget csv 시도 : 404에러
import wget
print('Beginning file download with wget module')
url = 'https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%202/data/FuelConsumptionCo2.csv'
wget.download(url, 'FuelConsumptionCo2.csv')
->url을 변경했으며, download안의 파일타입을 csv로 바꿨습니다.
실행결과
urllib.error.HTTPError: HTTP Error 404: Not Found
->404에러가 납니다. 즉 url이 존재하지 않는다는 뜻인데, 실제로 저 url을 들어가보면 파일이 존재합니다. 해결할 수 없어 우회하기로 합니다.
해결 : requests.get(url)사용
import requests
print('Beginning file download with requests module')
url = "https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%202/data/FuelConsumptionCo2.csv"
req = requests.get(url)
url_content = req.content
csv_file = open('FuelConsumption.csv','wb')
csv_file.write(url_content)
csv_file.close()
만약 위의 코드를 쓰신다면 , url부분만 수정하시면 됩니다.
이해하기 csv 생성 과정과 'wb'?
중간에 보시면 'wb'라는 부분이 있습니다. 아래는 각 문자에 대한 설명입니다. 이 친구는 무슨 뜻 일까요?
Character Meaning
--------- ---------------------------------------------------------------
'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
'a' open for writing, appending to the end of the file if it exists
'b' binary mode
't' text mode (default)
'+' open a disk file for updating (reading and writing)
'U' universal newline mode (deprecated)
이것을 이야기하려면 csv가 만들어지는 과정을 얘기해야 할 것 같습니다.
과정
-
csv를 연다
-
내용을 입힌다
-
저장한다.
이 1번의 과정에서 모드를 설정해주어야 합니다. csv를 만들때 문제가 되는 점들은 이런 모드를 잘못 설정하거나, 마지막에 close()를 해주지 않아서 제대로 실행되지 않는 경우들이 있었습니다. 'w'가 붙는 이유는 내용을 덮어쓰기 위한건 알겠는데, 'b'의 의미는 저도 찾아봐야 겠습니다.
응용하기: `.`과`..`을 통해 상대위치(relative path)해보기
`..`활용
위의 폴더 구조는 Programming -> wget -> wgetTest.py로 되어 있습니다. 그래서 현재 위치는 Programming -> wget 입니다. 프로젝트 특성에 따라서 현재 실행되는 파일을 기준으로 그 하나 위 또는 아래등등의 위치를 지정해줘야 하는 경우가 있습니다. Linux의 vim를 이용하면 미치도록 많이 사용할 수 있던데, 한번 응용해보고 싶었습니다.
`.`활용
마찬가지로 폴더 위치를 지정할때 `.`은 현재 위치를 뜻합니다. 위의 경우 'FuelConsumption.csv'는 './FuelConsumption.csv'와 같은 의미를 가집니다. 이를 이용해 하위폴더에도 파일을 저장할 수 있습니다. 단, 폴더가 생성되어 있지않으면 에러가 뜨네요.
참고사이트
'기타 > 공부노트' 카테고리의 다른 글
[Python] HTML 테이블 파이썬 List로 만들기(feat. 파일첨부) (2) | 2021.01.21 |
---|---|
[Python / 알고리즘] 재귀용법 이해와 쓰임. (2) | 2021.01.19 |
[파이썬 / python]챕터5: 튜플, 리스트, 앨리어싱, 변경가능, 복제 (Tuples, Lists, Aliasing, Mutability, Cloning) (0) | 2021.01.17 |
지도학습과 비지도학습 (0) | 2021.01.15 |
[맥킨지]Is your company ready for the rise of smart cities? (0) | 2020.11.08 |