วันอาทิตย์ที่ 24 พฤศจิกายน พ.ศ. 2556

Assignment 2 - Python Directory Listing


Python Directory Listing

#!/usr/bin/env python
import os, webbrowser

#find all file and sub_directory
def find_dir( path ):
    try:
        allindir = []
        allinfile = []
        for f in os.listdir( path ):
            name, ext = os.path.splitext( f )
            if name.startswith(".") :#or ext == ".html":
                continue
            if ext == "":
                allindir.append(f)
            else:
                allinfile.append(f)
        return allindir,allinfile
    except Exception as err:
        print err

#generate html file
def make_html( path, mpass_dir, allindir, allinfile):
    #loop for body in html
    body = "<ol>"
    if mpass_dir != "":
        body = body + """<li><a href=./../page.html>Up to higher level directory</a></li><br>"""
    for k in allindir:
        body = body + """<li><a href=./""" + k + "/" + """page.html>""" + k + """</a></li><br>"""
    for g in allinfile:
        body = body + """<li><a href=./""" + g + """>""" + g + """</a></li><br>"""
    body = body + "</ol>"
    file = open(path+"/page.html", 'w')
    file.write("""
<html>
    <head>
        <title>Directory listing for """ + path +"""</title>
    </head>
    <body bgcolor="skyblue">
        <br><font color="white" size = "5">
        Directory listing for """ + path +"""<br><br><hr><br><ul>
        """+body+ """
        </font></ul><hr>
    </body>
</html>
               """)
    file.close()
    print "Generate HTML Complete"

#run make_html recursive
def remake_html(pass_dir,all_dir):
    for i in all_dir:
        os.chdir(i)
        current_dir = os.getcwd()
        newall_dir, newall_file = find_dir(current_dir)
        make_html(current_dir, pass_dir, newall_dir, newall_file)
        if len(newall_dir)>0:
            remake_html(current_dir,newall_dir)
        os.chdir(pass_dir)

original_dir = os.getcwd()
all_dir, all_file = find_dir( original_dir )
make_html(original_dir, "", all_dir, all_file)
remake_html(original_dir, all_dir)
os.chdir(original_dir)
webbrowser.open_new_tab("./page.html")

    จากโค้ดข้างบนนี้เราได้ import os, webbrowser ซึ่ง os เรา import มาเพื่อใช้ในการค้นหาไฟล์และโฟลเดอร์ใน Directory เพื่อน้ำไปสร้างเป็นไฟล์ HTML Directory Listing ส่วน webbrowser ใช้ในการเปิดไฟล์ HTML ที่เราสร้างทันทีหลังรันโปรแกรมสร้างไฟล์ HTML เสร็จ
โดยโปรแกรมนี้จะประกอบด้วย Function 3 อันคือ find_dir, make_html, remake_html
โดยที่ find_dir มี Argument 1 ตัวคือ path ซึ่งจะทำการค้นหาไฟล์และโฟลเดอร์ย่อยภายใน Directory ที่ป้อนให้แต่จะไม่นำไฟล์ที่เป็น hidden file มาแสดงด้วยซึ่ง Function นี้จะ return ค่าออกมาเป็น list 2 อันที่เก็บข้อมูลของไฟล์และโฟลเดอร์ใน Directory ที่เราให้ค้นหากลับออกมา

    ในส่วนของ make_html มี Arguments ทั้งหมด 4 ตัวคือ path, mpass_dir, allindir, allinfile ซึ่ง path ก็จะเป็นตัวที่เก็บข้อมูลของ Directory ที่กำลังจะสร้างไฟล์ HTML อยู่ในขณะนั้นและ mpass_dir คือตัวแปรเก็บ Directory ก่อนหน้าหรือชั้นบนของชั้นที่เราทำงานอยู่นั่นเอง ส่วน allindir และ allinfile จะเป็น list ที่เก็บข้อมูลของไฟล์และโฟลเดอร์ที่มีอยู่ใน Directory โดยฟังก์ชั่นนี้จะทำการสร้างลิ้งค์ซึ่งเป็นโค้ด HTML ของโฟลเดอร์และไฟล์ทั้งหมดตามลำดับเก็บไว้ในตัวแปร body ก่อนจากนั้นจึงสร้างไฟล์ HTML แล้วเขียนโค้ด HTML ลงไปในไฟล์ชื่อ page.html โดยส่วนของ body ก็นำตัวแปร body ที่สร้างไว้ก่อนหน้าไปใส่ในโค้ดด้วยเมื่อเขียนไฟล์เสร็จก็ทำการปิดไฟล์

    จากนั้นในส่วนของ remake_html เป็น Function แบบ recursive จะมี Arguments ทั้งหมด 2 ตัวคือ pass_dir, all_dir โดย pass_dir คือตัวแปรเก็บ Directory ของรอบก่อนหน้านี้ไว้ ส่วน all_dir จะเป็น list ที่เก็บข้อมูลของโฟลเดอร์ที่เราต้องสร้างไฟล์ HTML ทั้งหมดไว้โดยเริ่มจากการวน loop เพื่อเข้าถึงทุกๆโฟลเดอร์และทำการย้าย Directory ที่ทำงานไปที่โฟลเดอร์ที่กำลังเข้าถึงและทำการค้นหาไฟล์และโฟลเดอร์หากมีโฟลเดอร์ก็ให้เรียก remake_html อีกทีเข้าไปสร้าง HTML เพิ่มจนไม่มีโฟลเดอร์แล้วก็ย้อนกลับไปยัง Directory ข้างบนผ่านตัวแปร pass_dir นั่นเองและก็วนไปเรื่อยๆจนครบทุกโฟลเดอร์ย่อยจากตำแหน่งที่เรารันโปรแกรม

    เมื่อสร้างไฟล์ HTML ครบทั้งหมดแล้วก็ใช้คำสั่งของ webbrowser ในการเปิด HTML ของหน้าแรกสุดผ่าน browser ขึ้นมาทันที

    จะเห็นว่านอกจากเราจะสามารถเขียนไฟล์ HTML ผ่านโปรแกรม Python ได้แล้วนั้นเรายังสามารถใช้ความสามารถของโปรแกรม Python ในการค้นหาไฟล์และ Directory ที่อยู่ในโฟลเดอร์ต่างๆพร้อมทั้งยังสามารถนำชื่อไฟล์และโฟลเดอร์เหล่านั้นมาสร้างเป็น Directory Listing และลิ้งค์เข้าไปยังไฟล์หรือ Sub Directory เหล่านั้นได้ในรูปแบบไฟล์ HTML

โดยได้ศึกษาการเขียนโค้ด HTML จากเว็บ w3schools

ไม่มีความคิดเห็น:

แสดงความคิดเห็น