WEB2 - Python

활용 - 파일 기능을 이용해 본문 구현

수업소개

본문의 내용을 별도의 파일로 저장하고, 파이썬의 파일 제어 기능을 이용해서 파일을 읽어서 본문의 내용을 자동으로 생성하는 기능을 구현해봅니다. 

 

 

강의

 

 

소스코드

변경사항

#!/usr/local/bin/python3
print("Content-Type: text/html")
print()
import cgi
form = cgi.FieldStorage()
if 'id' in form:
    pageId = form["id"].value
    description = open('data/'+pageId, 'r').read()
else:
    pageId = 'Welcome'
    description = 'Hello, web'
print('''<!doctype html>
<html>
<head>
  <title>WEB1 - Welcome</title>
  <meta charset="utf-8">
</head>
<body>
  <h1><a href="index.py">WEB</a></h1>
  <ol>
    <li><a href="index.py?id=HTML">HTML</a></li>
    <li><a href="index.py?id=CSS">CSS</a></li>
    <li><a href="index.py?id=JavaScript">JavaScript</a></li>
    <li><a href="index.py?id=Python">Python</a></li>
  </ol>
  <h2>{title}</h2>
  <p>{desc}</p>
</body>
</html>
'''.format(title=pageId, desc=description))

 

댓글

댓글 본문
  1. 태발군
    감사합니다 :)
    대화보기
    • scientist
      한글이 출력되지 않았는데 덕분에 해결되었습니다 감사합니다!

      https://digital-play.tistory.com/103
      파이썬 unicode decode error 원인
      대화보기
      • 윤재승
        점점 봤어요 수가 줄어든다
      • labis98
        2022.02.23 좋은 강의 한번 더 들어요~~~!
      • pmxsg
        2022.02.04
      • labis98
        20220109 좋은 강의 감사합니다.
      • 2021.09.11 완료 WOW
      • 이택진
        210520
      • 초딩 개발자
        2021/05/09
      • jeisyoon
        2021.04.09 화일 기능을 이용하여 본문 구현 - OK
      • Scia
        data 폴더가 syntax의 하위 폴더로 들어갔으니 open() 안의 함수의 경로를 안 바꿔줘서 그러지 않았을까요??

        open('syntax/data/'+pageId).read()
        대화보기
        • 이재형
          2021.01.25
        • VIBOT
          OK
        • 박민지
          2021.01.13
        • hksap
          210101
        • HolyWater
          2020.10.14
        • dagel0102
          20.10.09
        • cgoing
          cgoing / 2020.10.02
        • jiyeong
          2020.09.01.
        • OneJae EE
          20.05.08 금 / 37세 비전공자 / 완료
        • 바보
          data 폴더의 HTML을 소문자로 만들어서 빈 페이지가 나왔습니다 ㅜ,.ㅜ
        • 악어
          2020-03-11 완료
        • 스티븐잡숴
          완료
        • 초보왕
          페이지마다 이미지를 넣고싶은데 index.py 에서는 이미지가 잘 나오는데 html 페이지에서는 태그입력을 해도 이미지가 경로지정도 제대로 해줬는데 안나오네요.. 뭔가 다른 방법이 필요한가요?
        • mucollabo@gmail.com
          저는 HTML 을 HTLM 이라고 오타 내놓고 한참을 해맸네요...TT
          혹 저처럼 ~~ㅋㅋ 스펠링 함 점검해보세요^^
        • 왕초
          그 이유가 궁금하네요ㅜㅜㅜㅜ
          대화보기
          • apldeap
            12/26
          • 자랭쓰
            저장하고서 저장한 내용이 한글이면 화면이 공백으로 나오는 에러가 떴었는데 ,
            description = open('data/'+pageId,'r',encoding='UTF8').read()
            이처럼 데스크립션과 Id 뒤에 encoding = 'UTF8' 이라는 코드를 입력해주니 되네요!! 수업 잘듣고있습니다. 감사합니다.
          • xuanxi
            20191126
          • 쑤우
            수강완료. 감사합니다~
          • 굼벵이
            완료
          • 20191004 Ted 완료!
          • 음허허
            그리고 no such file 뜨는거는 지금 이거 파일 상주하고 있는 위치에서
            pwd 치고 위치를 그대로 받아서 open( "~~~~"
            넣으니까 작동햇읍니다.
          • 움하하
            html 의 경우 페이지를 다 따로 만들어서 그거를 연결시키는 과정인데,
            파이썬의 경우는 open(), read() 메소드 이용해서 기존템플릿은 유지하면서 내용을 바꿀수 잇다는건가요?
          • 어렵다
            파이썬 자체 내에서는 한글 실행이 되는데
            data 밑에 파일에 한글을 작성하면
            UnicodeDecodeError: 'cp949' 가 뜨면서 오류가 나옵니다.
            영어만 작성할 경우 잘 작동 되고요...
            해결 방법 혹시 아시나요..?
          • 어렵다
            파이썬 자체 내에서는 한글 실행이 되는데
            data 밑에 파일에 한글을 작성하면
            UnicodeDecodeError: 'cp949' 가 뜨면서 오류가 나옵니다.
            영어만 작성할 경우 잘 작동 되고요...
            해결 방법 혹시 아시나요..?
            대화보기
            • 참치아빠
              윈도우에서 한글 입출력 방법을 아래와 같이 해 보았더니, 잘 됩니다. 참고되시길...

              #!python
              import sys # 한글 출력하기 위해서
              import codecs # 한글 출력하기 위해서
              sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())

              print("Content-Type: text/html;charset=utf-8\r\n")
              #print()
              import cgi

              form = cgi.FieldStorage()
              if('id' in form):
              pageId = form["id"].value
              description = open('data/'+pageId,'r', encoding='utf-8').read()
              else:
              pageId = 'Welcome'
              description = 'Hello web'

              print('''<!doctype html>
              <html>
              <head>
              <title>WEB1 - Welcome</title>
              <meta charset="utf-8">
              </head>
              <body>
              <h1><a href="index.py">WEB</a></h1>
              <ol>
              <li><a href="index.py?id=HTML">HTML</a></li>
              <li><a href="index.py?id=CSS">CSS</a></li>
              <li><a href="index.py?id=JavaScript">JavaScript</a></li>
              </ol>
              <h2>{title}</h2>
              <p>{desc}</p>
              </body>
              </html>
              '''.format(title=pageId, desc=description))
            • San Ho Lee
              data 하위 데이터들은 상대경
              로를 지정해서 위치를 찾아 갈수 있게 하니 잘 작동하네요!
              '../data/' 요렇게 감싸니 잘 찾아주네요. 신통방통합니다. 너무 재밋습니다.
            • 한올지다
              아랫분의 말씀 참고해서 이렇게 하니까 해결됩니다!

              import sys
              import codecs
              import cgi

              print("Content-Type: text/html")
              print()

              # stdout의 인코딩을 UTF-8로 강제 변환한다
              sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
              form = cgi.FieldStorage()

              if 'id' in form:
              pageId = form.getvalue('id')
              description = open('./data/'+pageId , 'r', encoding = 'UTF-8').read()

              ...(생략)

              완전히 정확힌 이유는 모르겠네요 ㅎㅎ 설명해주실분???
            • 방패없음똥겜
              -
              대화보기
              • 방패없음똥겜
                브라우저 자체 인코딩을 euc-kr로 바꾸니까 제대로 출력이 됐습니다. 지금 구글버전은 인코딩을 자동으로 잡는다고 설정을 빼버려서 https://chrome.google.com......=ko 위 링크의 확장프로그램으로 euc-kr로 바꾸니까 됩니다. 이유는 잘 모르겠습니다.

                1. 파이썬 파일 헤더에 #-*- coding: utf-8 -*- 추가
                2. 확장프로그램으로 브라우저 인코딩을 euc-kr로 변경

                근본적인 해결책이 아닌점 애석하게 생각합니다.

                수정) 이미 디디님이 해결방안을 올려주셨네요;;
                대화보기
                • 점점 어려워 지네요... ㅠㅠ
                • JuicyFresh
                  감사합니다.
                • Seankim
                  CSS, HTML 파일이 안뜨네요
                • 초간단
                  No such file 뜨는거
                  htdocs폴더-data폴더-(CSS,HTML,JavaScript파일)
                  htdocs폴더-syntax폴더-(index.py파일, 1.html, 2.html, 3.html 파일)
                  이런식 파일들이 위치해 있다면,

                  index.py파일에서 경로 'data/' 를,
                  '../data/' 로 바꿔주시면 되요.
                • 도라도라
                  Codeanywhere로 하시는 분들은 /home/cabox/workspace/temp/data/ 라고 하시면 정상적으로 실행됩니다.
                • 캬캬갱스
                  data 폴더를 syntax 폴더 밑으로 했는데요 화면이 안나와요 index.py 페이지는 뜨구요 Hello,web 까지는 됐구요
                  data폴더 안에 HTML.txt, CSS,txt, JavaScript.txt 파일만들었구요 내용도 같게 했는데요 ㅠㅠ 화면이 흰색창 그래로 입니다 ㅠㅠ
                • guattari92
                  저 data 폴더를 htdocs 폴더에서 syntax 폴더 밑으로 옮겼더니 실행이 잘되네요.
                  동영상에서는 htdocs 폴더 밑에서 불러와도 바로 작동이 잘 되던데, 왜 index.py 와 같은 폴더 내에 있을 때만 불러와지는 걸까요?
                  대화보기
                  • sudo
                    유튜브 재생목록에 해당파일이 누락되어있습니다 확인부탁드립니다
                  • guattari92
                    data 폴더 및에 HTML 파일을 만들었는데,
                    에러로그에는 FileNotFoundError: [Errno 2] No such file or directory: 'data/HTML'
                    이런 메시지가 계속 뜨네요. 어떻게 해야할까요?
                  버전 관리
                  egoing
                  현재 버전
                  선택 버전
                  graphittie 자세히 보기