U E D R , A S I H C RSS

TFP예제/Wiki Page Gather



1. 로그램 개

돌리다가 MindMap 났다. Page Navigation . 무 딩부 려고 는데 머릿 리가 되 다. 고 그리고 만. -_-; ' 공부 는 것!' 공부란 머리로 반, 몸 다. ' ' 란 말는 것 리라.

다.

2. 로그래밍 느낀

  • ' 는 가 것부 라.' 디 TFP Refactoring 된다. TFP 기능 가 기본다. ( -- 그래봤 3만 -- 면, TFP를 LongMethod 가 난 다. (LongMethod Bad Smell BadSmellsInCode라.) 만 가 발더라 막무가내 다. 만 Bad Smell 난다면 Refactoring 면 된다. (고로 밑 Refactoring 다.)

  • Python 라는 는 녀다. 방 basic 그것만, '라는 것 다' 를 다 기가 되다. 리가 로그래밍 때는 (는 C++) Visual C++ 나만 놓고 로그래밍 는 경다. 보 product code 를 나, 기능 (드 구) 나. - 로그래밍는 3개를 는 경 다반다. Python shell 드를 구는데 매 다. ( 되면 검문 다. VS 2-3개 랑 python IDLE 2-3개 랑 다를바가 뭐냐.. --; 내가 말 C++나 PHP 럼 공 는 것. -_a ..) . 나는 모를 보면 목 검 관련 드를 보고 검 다.


3. WikiPageGatherTestCase.py

~cpp 
import unittest
from WikiPageGather import *

class WikiPageGatherTestCase (unittest.TestCase):
    def setUp (self):
        self.pageGather = WikiPageGather ()

    def tearDown (self):
        self.pageGather = None
    
    def testConvertWikiPageNameToMoinFileName (self):
        self.assertEquals (self.pageGather.WikiPageNameToMoinFileName (''''''), '''_c7_d1_b1_db_c5_d7_bd_ba_c6_ae''')
        self.assertEquals (self.pageGather.WikiPageNameToMoinFileName ("FrontPage"), "FrontPage")

    def testGetPageNamesFromPage (self):
        self.pageGather.SetPage ("FrontPage")
        self.assertEquals (self.pageGather.GetPageNamesFromPage (), ["LearningHowToLearn", "ActiveX", "Python", "XPInstalled", "TestFirstProgramming", "", "PrevFrontPage"])

    def testGetPageNamesFromString (self):
        strings = "Test First In TestFirstIn TesF TestFi guuweo StringIn"
        self.assertEquals (self.pageGather.GetPageNamesFromString (strings), ["TestFirstIn", "TestFi", "StringIn"])
        strings = '''["Testing"] ["Testing The Program"] higu TestFirst twet'''
        self.assertEquals (self.pageGather.GetPageNamesFromString (strings), ["Testing", "Testing The Program", "TestFirst"])

    def testIsHeadTagLine (self):
        strings = "== testing =="
        self.assertEquals (self.pageGather.IsHeadTagLine (strings), 1)
        strings = "tese ewfe ewfw"
        self.assertEquals (self.pageGather.IsHeadTagLine (strings), 0)

    def testRemoveHeadLine (self):
        strings = '''=== ExtremeProgramming ===\ntesting.. -_-a\n== TestFirst Programmin ==\nfwe\n'''
        self.assertEquals (self.pageGather.RemoveHeadLine (strings), "testing.. -_-a\nfwe\n")
        

    def testGetWikiPage(self):
        self.assertEquals (self.pageGather.GetWikiPage ("FrontPage"), '=== Reading ===\n' +
                           '["LearningHowToLearn"]\n\n\n=== C++ ===\n["ActiveX"]\n\n' +
                           '[[Include(ActiveX,Test,1)]]\n\n=== Python ===\n["Python"]\n\n' +
                           '=== ExtremeProgramming ===\n * ["XPInstalled"]\n * TestFirstProgramming\n'+
                           ' * ["ÇѱÛÅ׽ºƮ"]\n\n----\n["PrevFrontPage"]\n\n----\n')

suite = unittest.makeSuite (WikiPageGatherTestCase, "test")

runner = unittest.TextTestRunner ()
runner.run (suite)

4. WikiPageGather.py

~cpp 
import string, urllib, re

class WikiPageGather:
    def __init__(self):
        self.pagePath = "f:\web\wiki-moinmoin\data\text\"
        self.pagename = ''

    def WikiPageNameToMoinFileName (self,pagename):
        safe = string.letters + string.digits
        res = list(pagename)
        for i in range(len(res)):
            c = res[i]
            if c not in safe:
                res[i] = '_%02x' % ord(c)
        return string.joinfields(res, '')

    def SetPage (self, pagename):
        self.pagename = pagename
     
    def GetWikiPage (self, pagename):
        fullpathname = self.pagePath + self.WikiPageNameToMoinFileName (pagename)
        pagefile = open (fullpathname, 'r')
        lines = pagefile.readlines ()

        page = ''
        for line in lines:
            page += line

        pagefile.close()

        return page

    def RemoveHeadLine (self, lines):
        lines = string.split (lines, "\n")

        resultText = ''
        for line in lines:
            if self.IsHeadTagLine (line):
                continue
            elif line == '':
                continue
            resultText += line + "\n"

        return resultText
        
    def IsHeadTagLine (self, strings):
        try:
            if strings[0] == '=':
                return 1
            elif strings[0:2] == '==':
                return 1
            elif strings[0:3] == '===':
                return 1
            else:
                return 0
        except IndexError:
            return 0

    def GetPageNamesFromPage (self):
        page = self.GetWikiPage (self.pagename)
        page = self.RemoveHeadLine (page)
        pagenamelist = []
        pagenamelist += self.GetPageNamesFromString (page)

        return pagenamelist
        
    def GetPageNamesFromString (self, strings):
        PageNameRegularStr = '''(([A-Z][a-z0-9]+){2,})|(\[".*?"\])'''
        PageNameReg = re.compile (PageNameRegularStr)
        PageNameReg.findall (strings)

        pagenamelist = []
        for pagename in PageNameReg.findall (strings):
            if pagename[0] != '':
                pagenamelist.append (pagename[0])
            elif pagename[2] != '':
                realname = string.replace (pagename[2], '''["''', '')
                realname = string.replace (realname, '''"]''', '')
                pagenamelist.append (realname)

        return pagenamelist
    
    def main (self):
        self.SetPage ("FrontPage")
        for pagename in self.GetPageNamesFromPage ():
            print "pagename : " + pagename
            print "filename : " + self.WikiPageNameToMoinFileName (pagename)
        

if __name__ == "__main__":
    pageGather = WikiPageGather ()
    pageGather.main ()

5. 결과

돌리고 는 모 디렉리 기. (Python shell IDLE 그런 래는 다. .)

~cpp 
pagename : LearningHowToLearn
filename : LearningHowToLearn
pagename : ActiveX
filename : ActiveX
pagename : Python
filename : Python
pagename : XPInstalled
filename : XPInstalled
pagename : TestFirstProgramming
filename : TestFirstProgramming
pagename : 
filename : _c7_d1_b1_db_c5_d7_bd_ba_c6_ae
pagename : PrevFrontPage
filename : PrevFrontPage

6.

당 모 FrontPage open 다. FrontPage가 바뀌고리 바르다 더라 러를 다. - FrontPage 따로 빼두는 방법 겠군. -_-; (문를 명두면 결방법 되기 다. ^^;)


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:10
Processing time 0.0144 sec