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. jeisyoon
    2021.04.09 화일 기능을 이용하여 본문 구현 - OK
  2. data 폴더가 syntax의 하위 폴더로 들어갔으니 open() 안의 함수의 경로를 안 바꿔줘서 그러지 않았을까요??

    open('syntax/data/'+pageId).read()
    대화보기
    • 이재형
      2021.01.25
    • OK
    • 박민지
      2021.01.13
    • 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'
                이런 메시지가 계속 뜨네요. 어떻게 해야할까요?
              • 굿날
                자바스크립 페이지의 (/ˈdʒɑːvəˌskrɪpt/[6]) 이 부분 때문에 페이지 로딩이 되지 않습니다.
                (/ˈdʒɑːvəˌskrɪpt/[6]) 이걸 지우면 정상 작동 하고요.
                에러 로그는 이거입니다.
                File "/home/cabox/workspace/index.py", line 8, in <module>
                description = open('data/' + pageId, 'r').read()
                File "/usr/lib/python3.4/encodings/ascii.py", line 26, in decode return codecs.ascii_decode(input, self.errors)[0]
                UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 13: ordinal not in range(128)
                어떻게 해결 가능한가요?
              • egoing
                오호 저도 몰랐는데 고맙습니다!
                대화보기
                • 디디
                  윈도우에서 한글이 깨져서 나온다면,
                  sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
                  이 라인을 추가해보세요.

                  아래 블로그에서 자세하게 나와있습니다.
                  https://blog.ayukawa.kr......342
                  대화보기
                  • ym kim
                    수업을 따라가면서 나만의 웹페이지를 만들어보고 있습니다.
                    근데 한글만 넣으면 자꾸 오류가 나는데, 해결 방법을 여쭈어보아도 될지요?
                    (구글링을 해보면
                    #-*- coding:utf-8 -*-를 삽입하라는 등 몇가지 방법을 따라해 보았지만 소용없었습니다 ㅠ
                    참고로 MacOS 사용자입니다,)

                    늘 좋은 강의 감사드립니다!!
                  • PassionOfStudy
                    2018-03-28 - 3일차_다 번째 수강완료!

                    이번 수업은 이해가 잘 되지않은 부분이 있어서 반복해서 들었습니다.
                    궁금해서 여쭤보겠습니다.
                    Q1)
                    python의 open('data/'+pageId, 'r').read()에서 .read()라는 것은 열린파일의 텍스트를 읽어주는
                    라이브러리 함수같은 것인가요?
                    Q2)
                    https://docs.python.org......tml 사이트에서 참고하는데요
                    open후에 close()함수를 써서 닫아주는 것을 권장하던데요
                    python에서 메모리낭비를 줄이기위해 자체적으로 닫아주지만 권장한다는것은 문제도 있다는 것인가요?
                  • 안드레아신
                    혼자서 이리저리 다시한번 시도 해본결과 ...
                    JavaScript파일 생성해서 수업대로 "java is lorem~~ " 혹은 다른 문장 집어넣으면 무리없이 실행되는데,

                    JavaScript 설명 wiki 영문판 첫문단을 가져와서 붙여넣으면 에러가 뜨네요 ..

                    어차피 data폴더의 JavaScript파일은 텍스트형식인데
                    왜 가져오는게 다르다고 실행이 안되는지 궁금합니다^^

                    참고.. )
                    발췌한 첫문단 위치 : https://en.wikipedia.org......ipt
                    대화보기
                    • 안드레아신
                      수업 잘 듣고 있습니다.
                      강의대로 실행은 문제없이 이루어지고 있는데
                      한군데서 오류가 뜨는데 해결방법을 알고싶어서 질문드려요~

                      HTML/ CSS는 클릭하면 내용이 잘 뜨는데
                      JavaScript를 클릭하면 아무것도 안나오면서 에러가 발생합니다.
                      error.log를 보니 CSS항목에 잘못(?)이 있는걸로 해석해서
                      CSS대신 python으로 똑같이 삽입해도
                      위 두개 항목은 변함없이 실행되는데 "JavaScript"만 누르면 아무것도 안뜨네요 ㅠㅠ

                      뭐가 문제인지 알고 싶습니다^^

                      error.log에 나온내용 (앞문장 생략)
                      [client 127.0.0.1:55652] AH01215: Traceback (most recent call last):\r: D:/Bitnami/wampstack-7.1.15-0/apache2/htdocs/index.py, referer: http://127.0.0.1......hon

                      [client 127.0.0.1:55652] AH01215: File "D:/Bitnami/wampstack-7.1.15-0/apache2/htdocs/index.py", line 8, in <module>\r: D:/Bitnami/wampstack-7.1.15-0/apache2/htdocs/index.py, referer: http://127.0.0.1......hon

                      [client 127.0.0.1:55652] AH01215: description = open('data/'+pageId, 'r').read()\r: D:/Bitnami/wampstack-7.1.15-0/apache2/htdocs/index.py, referer: http://127.0.0.1......hon

                      [client 127.0.0.1:55652] AH01215: UnicodeDecodeError: 'cp949' codec can't decode byte 0xcb in position 15: illegal multibyte sequence\r: D:/Bitnami/wampstack-7.1.15-0/apache2/htdocs/index.py, referer: http://127.0.0.1......hon
                    • 폭스킴
                      문법 다 배우고 활용을 배우는게 일반적인데, 이렇게 문법과 활용을 병행해서 배우니까 더 잘 와닿네요~ 단, 정말 초심자에게는 좀 어려울 듯 합니다만, 이 수업 구성에 감탄을 보냅니다~ 좋아요를 True 박은 반복문으로 돌려서 드리고 싶어요~ ^^
                    버전 관리
                    egoing
                    현재 버전
                    선택 버전
                    graphittie 자세히 보기