對“第一個Python程式”的改進

來源:互聯網
上載者:User

標籤:python   讀檔案   建立檔案   檔案操作   

概述:

本程式主要是模仿《Python核心編程》中3.6節——第一個Python程式,並在其基礎上做了一些小的改進,而改進的要求則是來源於第三章的課後練習題。

本篇部落格的一個核心問題就是在我們如何避免重複製造輪子。


課本來源程式:

這裡不對課本上的來源程式作過多地講解,因為課本本身就說得非常清楚而且易懂。


改進需求:

1. 可以建立新的檔案;

2. 可以讀取新的檔案;

3. 可以讓使用者選擇建立或是讀取檔案.


看到上面的需求,可以你的第一感覺就是,哦,這個太簡單了。不就是把之前寫過的代碼在這裡複製粘貼一下就好了啊,最多不過是多加一個if的判斷,有什麼難的?

當然我並不否認,這的確是一個簡單的程式。不過從優良的代碼品質來看,可不能是簡單的複製和粘貼這麼簡單哦。因為複製代碼到自己的程式中,這會導致代碼的複用性大幅下降,對於小程式可能是沒有什麼影響,可是對於一些龐大的系統來說,這可能是一個致命的傷,因為維護起來可能會異常艱難。好了,說了這麼多,那就來看看我是怎麼解決這個需求的吧。


思路:

我把之前建立檔案和讀取檔案的檔案還是保留,然後在第三個檔案makeNreadTextFile.py中使用代碼去調用前兩個檔案中的方法。


程式碼分析:

makeNreadTextFile.py

#!/usr/bin/env python'makeNreadTextFile.py -- create or read a text file'import subprocess# call makeTextFile.pydef call_make():    cmd = [ "python", "makeTextFile.py"]    result = subprocess.call(cmd, 0, None, None, None, None)    return result# call readTextFile.pydef call_read():    cmd = [ "python", "readTextFile.py"]    result = subprocess.call(cmd, 0, None, None, None, None)    return result# get the choose to read or make a text filechoose = raw_input('Enter the choose(r/m)')if choose == 'm':    call_make()elif choose == 'M':    call_make()elif choose == 'r':    call_read()elif choose == 'R':    call_read()else:    print 'your choose is error!'

大家可以看到上面有幾個地方比較特殊:


1.import subprocess

你百度過後就會知道subprocess是開啟一個新的線程,並與之通訊。

2.result = subprocess.call(cmd, 0, None, None, None, None)

通過1就應該知道,這裡就是正在通訊。


當然,如果只是對書本上的代碼做完整保留,可能達不到我們想要的效果。於是,需要做一些小小的修改。

makeTextFile.py

#!/usr/bin/env python'makeTextFile.py -- create text file'import osls = os.linesepdef make_text_file():    # get filename    while True:        fname = raw_input('Enter file name:')        if os.path.exists(fname):            print "ERROR: '%s' already exists" % fname        else:            break    # get file content (text) lines    all = []    print "\nEnter lines('.' by iteslf to quit).\n"        #loop until user terminates input    while True:        entry = raw_input('>')        if entry == '.':            break        else:            all.append(entry)    # write lines to file with proper line-ending    fobj = open(fname, 'w')    fobj.writelines(['%s%s' % (x, ls) for x in all])    fobj.close()    print 'DONE!'if __name__ == "__main__":    make_text_file()

readTextFile.py

#!/usr/bin/env Python'readTextFile.py -- read and display text file'def read_text_file():    # get filename    fname = raw_input('Enter filename:')    # attemp to open file for reading    try:        fobj = open(fname, 'r')    except IOError, e:        print "*** file open error:", e    else:        # display contents to the screen        for eachLine in fobj:            print eachLine,    fobj.close()if __name__ == "__main__":    read_text_file()

運行效果:


對“第一個Python程式”的改進

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.