• [파이썬 기초]open() 함수로 파일 읽기

    2021. 3. 15.

    by. 웰시코더

    반응형

    -파이썬 index.py 내부의 내용을 파일로 따로 만들어 open() 함수로 읽어본다.

    -생활코딩 파이썬 강의를 기반으로 학습 및 보충학습하였다.

    -파이썬은 3.9.2 ver를 사용한다.


     

    현재 index.py라는 파일은 다음과 같다.

     

    #!Python
    print("Content-Type: text/html")
    print()
    import cgi
    form = cgi.FieldStorage()
    
    #a태그 클릭시 id값에 따른 pageId 분기처리
    if 'id' in form:
        pageId = form["id"].value
    else :
        pageId = 'welcome'
    
    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>The World Wide Web (abbreviated WWW or the Web) is an information space where documents and other web resources are identified by Uniform Resource Locators (URLs), interlinked by hypertext links, and can be accessed via the Internet.[1] English scientist Tim Berners-Lee invented the World Wide Web in 1989. He wrote the first web browser computer program in 1990 while employed at CERN in Switzerland.[2][3] The Web browser was released outside of CERN in 1991, first to other research institutions starting in January 1991 and to the general public on the Internet in August 1991.
      </p>
    </body>
    </html>
    '''.format(title=pageId))
    

     

     

     화면의 본문을 파일로 따로 만들어서 그것을 타이틀, 서브타이틀 클릭시마다 불러오게 하고싶다. 그러기 위해서 open()함수를 사용하여 파일 본문을 읽어올 수 있다.

     

    우선 data폴더 생성 후, 본문별 파일들을 만들었다.

     

     

     왼쪽 data폴더에 CSS, HTML, JavaScript 파일을 만들었다. 내용은 간단하게 Hello CSS, Hello HTML, Hello JavaScript 등으로 만들었다.

     

    open() 사용하기

     

     이제 open() 함수를 사용해야 한다. 다음과 같이 사용한다.

     

    open('파일명', '파일 열기 모드')


     

    파일명은 경로까지 함께 적어주며, 파일 열기 모드는 3가지가 있다.

     

    r 읽기모드 - 파일을 읽기만 할 때 사용
    w 쓰기모드 - 파일에 내용을 쓸 때 사용
    a 추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용

     

    이제 위의 data폴더의 HTML을 읽어오기 위해서는 다음과 같이 작성하면 된다.

     

    #!Python
    print("Content-Type: text/html")
    print()
    import cgi
    form = cgi.FieldStorage()
    
    #a태그 클릭시 id값에 따른 pageId 분기처리
    if 'id' in form:
        pageId = form["id"].value
        description = open('data/'+pageId,'r').read() #open함수로 내용 불러오기
    else :
        pageId = 'welcome'
        description = 'Welcome!'

     

     먼저 작성되어 있는 if문은 최상단에 있는 WEB 클릭시와 서브타이틀들을 클릭시의 경우를 나누기 위해 사용한다. 클릭하여 쿼리스트링의 id값이 있으면 if문 첫 조건을 타고, id값이 없으면(WEB 클릭시) 아래 else 조건을 탄다. WEB의 a태그의 href 속성을 보면 쿼리스트링 id가 없기 때문이다.

     

     그리고 if문 분기에 description이라는 변수와 open() 함수를 추가하였다. 예를들어 서브타이틀의 HTML을 클릭했다고 하자. 쿼리스트링으로 받은 id인 HTML이 pageId에 담긴다. 이후 open() 함수의 첫번째 인자가 'data/'+pageId이기 때문에 data/HTML이 되고, 두번째 인자가 r이기 때문에 읽기모드로 HTML 파일이 description 변수에 담기게 된다.

     

    이후 이 description을 사용하기 위해 포맷팅을 사용하면 다음과 같다.

     

    <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))

     

     format인자에 desc=description이라고 선언하였기 때문에 서브타이틀(HTML,CSS,JavaScript) 클릭시마다 desc에 파일 내용들이 담기고 {desc}에 파일 내용이 표현된다.

     

    최종 완성은 다음과 같다.

     

    #!Python
    print("Content-Type: text/html")
    print()
    import cgi
    form = cgi.FieldStorage()
    
    #a태그 클릭시 id값에 따른 pageId 분기처리
    if 'id' in form:
        pageId = form["id"].value
        description = open('data/'+pageId,'r').read() #open함수로 내용 불러오기
    else :
        pageId = 'welcome'
        description = 'Welcome!'
    
    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))
    

    open() 뒤에 description.close()처럼 close() 함수를 이용해 읽은 파일 객체를 닫아줄 수 있다. 파이썬은 자동으로 프로그램 종료시 열려있는 파일 객체를 닫아주기 때문에 생략해도 되지만 오류 발생 가능성이 있기때문에 쓰는 것을 권장한다고 한다.(예제에는 사용하지 않았음)

     

    출처:wikidocs.net/26

     

     

    반응형

    댓글