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. 음허허
    그리고 no such file 뜨는거는 지금 이거 파일 상주하고 있는 위치에서
    pwd 치고 위치를 그대로 받아서 open( "~~~~"
    넣으니까 작동햇읍니다.
  2. 움하하
    html 의 경우 페이지를 다 따로 만들어서 그거를 연결시키는 과정인데,
    파이썬의 경우는 open(), read() 메소드 이용해서 기존템플릿은 유지하면서 내용을 바꿀수 잇다는건가요?
  3. 어렵다
    파이썬 자체 내에서는 한글 실행이 되는데
    data 밑에 파일에 한글을 작성하면
    UnicodeDecodeError: 'cp949' 가 뜨면서 오류가 나옵니다.
    영어만 작성할 경우 잘 작동 되고요...
    해결 방법 혹시 아시나요..?
  4. 어렵다
    파이썬 자체 내에서는 한글 실행이 되는데
    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 자세히 보기