[코딩 파이썬] 함수 결과값을 text파일로 저장하기 (내장함수 sys.stdout 활용)
본문 바로가기
프로그램-코딩

[코딩 파이썬] 함수 결과값을 text파일로 저장하기 (내장함수 sys.stdout 활용)

by 신기한나라엘리삼 2022. 6. 29.

파이썬으로 내가 원하는 앱을 만들기 위해 앞서 HTMLCSS, Javascript의 기초를 짧게 공부했다. 그리고나서 파이썬을 보았는데 워낙 기초가 없고 지식이 없어서인지 코드 한줄 만드는데도 오랜 시간이 걸린다.

목표는 빠른 시일내 앱 하나를 만들어보는 것이기에 깊고 심도 있게 공부하는 것 보다는 직접 프로그램을 짜보고 수정/보완해 나가는 방식이 좋을 것 같다. 그래서 내가 원하는 프로그램을 구상하고 기존에 있는 웹/앱 서비스를 뜯어보면서 공부해 나가고 있다.

이번에 시도해보고 있는 건 내가 원하는 웹의 내용을 BeautifulSoup을 이용해 스크래핑 해오고 그 함수의 결과값을 홈페이지나 카톡으로 받아 보고자 한다.

코드를 짜던 중 막혔던 부분이 함수 결과값을 text 파일로 저장하기 였는데 이를 sys.stdout을 이용해 풀어냈다.

내장함수 sys.stdout 이용

내가 원하는 정보를 함수로 만들었다. 그 함수의 결과를 카톡이나 홈페이지에 정해진 시간 받아보고 싶었다. 먼저 print()함수를 이용해 출력한 결과값을 파일로 저장하거나 내보내기를 시도해 보았지만 실패했다. (지나가다 이 글을 보고 아는 분이 있다면 지식 나눔 부탁드립니다.) print() 명령도 열쇠글을 바꾸면 파일로 저장 할 수 있는것 같지만 찾지 못 해 다른 시도를 해보았다. 검색을 통해 내장함수 sys.stdout을 찾았고 적용해 본 결과 text 파일로 저장할 수 있었다. 

 

 

코드 짜기

가장 먼저 상단에 import로 sys 불러오기를 해준다. 그리고 sys.stdout = open('mydaily_report.txt   ','a', encoding="utf8") 한줄 넣어주면 print()로 출력되는 함수 결과 값을 text 파일 형식으로 저장할 수 있다. 주황색으로 표시해둔 부분은 내용을 추가한다는 것으로 기존의 내용은 그대로 두고 아래에 새로운 내용을 붙여서 파일을 작성하게 된다. 만약 기존 내용이 필요없고 새로운 내용으로만 쓰고 싶다면 'w' 를 써주면 된다.

그 뒤에 한글이 안깨지게 하기 위해서 encoding="utf8 을 써준다. 

 

 

[ 전체코드 ]

import requests, sys, datetime
from bs4 import BeautifulSoup

sys.stdout = open('mydaily_report.txt   ','a', encoding="utf8")   

def oneclick_inf(url):
    res = requests.get(url)
    res.raise_for_status()
    soup = BeautifulSoup(res.text, "lxml")
    return soup

def whether():
    url = "https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EC%84%9C%EC%9A%B8+%EB%82%A0%EC%94%A8&oquery=%EB%82%A0%EC%94%A8&tqi=hrW1AlprvhGssfxvMv0ssssstcN-423628"
    soup = oneclick_inf(url)
    curr_temp = soup.find("div",attrs={"class":"temperature_text"}).get_text()
    detail = soup.find("p" , attrs={"class" : "summary"}).get_text()
    min_temp = soup.find("span",attrs={"class":"lowest"}).get_text()
    max_temp = soup.find("span",attrs={"class":"highest"}).get_text()
    dust = soup.find("ul" , attrs={"class" : "today_chart_list"}).get_text()
    print("")
    print("[오늘의 날씨]")
    print(curr_temp)
    print(detail)
    print(min_temp)
    print(max_temp)
    print(dust) 

print("==== 시작선 ====")
current = datetime.datetime.now()
current_time = current.replace(microsecond=0)
print(current_time)
whether()   
print("==== 끝 ====")

 

실행을 해보면 mydaily_report.txt 파일이 생성된다.   

파일을 열어보면 스크래핑한 내용이 잘 들어가 있는 것을 확인 할 수 있다. 

 

# 웹 스크래핑은 유튜버 나도코딩님의 무료영상을 여러번 돌려보고 공부해가며 코드를 짰다. 이 글을 보지는 않겠지만 나도코딩님께 감사하다는 말을 전하고 싶다. 

 

이후작업

이후로는 스크래핑을 좀 더 정교하고 디테일하게 하고 저장한 TXT파일을 홈페이지나 카톡에 연결해 받아볼 수 있는 작업을 해보려고 한다. 더디지만 하나씩, 한발씩 해나가다보면 내가 필요한 작은 프로그램정도는 만들어 볼 수 있지 않을까? 

댓글