Python布局,讀寫檔案

2021-06-26 08:51:41 字數 3098 閱讀 9181



用模組來合理組織你的python **是簡單又自然的方法。你應該建立一種統一且容易閱讀的結構,並將它應用到每乙個檔案中去。下面就是一種非常合理的布局:

# (1) 起始行(unix)

# (2) 模組文件

# (3) 模組匯入

# (4) 變數定義

# (5) 類定義

# (6) 函式定義

# (7) 主程式

圖3–1 乙個典型模組的內部結構**。

主程式無論這個模組是被別的模組匯入還是作為指令碼直接執行,都會執行這部分**。通常這裡不會有太多功能性**,而是根據執行的模式呼叫不同的函式

主程式中的**通常包括變數賦值, 類定義和函式定義,隨後檢查__name__來決定是否呼叫另乙個函式(通常呼叫main()函式)來完成該模組的功能。主

程式通常都是做這些事。(我們上面的例子中使用test()而不是main()是為了避免你在讀到核心筆記前感到迷惑。) 不管用什麼名字,我們想強調一點那就是:這兒是放置測試**的好地方。大部分的python 模組都是用於匯入呼叫的,直接執行模組應該呼叫該模組的回歸測試**。

核心筆記:__name__ 指示模組應如何被載入,由於主程式**無論模組是被匯入還是被直接執行都會執行, 我們必須知道模組如何決定執行方向。乙個應用程式可能需要匯入另乙個應用程式的乙個模組,以便重用一些有用的**(否則就只能用拷貝貼上那種非物件導向的愚蠢手段)。這種情況下,你只想訪問那些位於其它應用程式中的**,而不是想執行那個應用程式。因此乙個問題出現了,「python 是否有一種方法能在執行時檢測該模組是被匯入還是被直接執行呢?」答案就是......(鼓聲雷動).....沒錯! __name__ 系統變數就是正確答案。

如果模組是被匯入, __name__ 的值為模組名字

如果模組是被直接執行, __name__ 的值為 '__main__'

在主程式中書寫測試**

優秀的程式設計師和軟體工程師,總是會為我們的應用程式提供一組測試**或者簡單教程。

對那些僅僅為了讓別的程式匯入而建立的模組來說, python 有效的簡化了這個任務。這些模組理論上永遠不會被直接執行, 那麼,在這個模組被直接執行時進行系統測試豈不妙哉? 設定起來難嗎? 一點兒也不。

測試**僅當該檔案被直接執行時執行, 也就是說不是被別的模組匯入時。上文及核心筆記中提到如何判斷乙個模組是被直接執行還是被匯入。我們應該利用 __name__ 變數這個有利條件。將測試**放在乙個或者叫main(), 或者叫test()(或者你隨便取個啥名字)的函式中,

如果該模組是被當成指令碼執行, 就呼叫這個函式。

if __name__ == '__main__'

新增改程式的測試**

***************=寫檔案*************************=

#!/usr/bin/python

import os

ls = os.linesep

fname = raw_input('enter the file name: ')

#fname ='/root/licmtest/test1.txt'

while true:

if os.path.exists(fname):

print "error:'%s' already exists" %fname

break

else:

break         

all=

print "\nenter lines('.'by itself to quit).\n"

fobj = open(fname,'w')

fobj.writelines(['%s%s' %(x,ls) for x in all])

fobj.close()

print 'done!'

python中,os.linesep是幹什麼的?----------------   os.linesep字串給出當前平台使用的行終止符。例如,windows使用'\r\n',linux使用'\n'而mac使用'\r'。

os.path.exists() 是 os 模組中乙個有用的函式, 幫助我們確認這一點。 當有輸入乙個不存在的檔名時, os.path.exists() 才會返回 false, 這時我們中斷迴圈繼續下面

的**。

***************===讀檔案***************==

#!/usr/bin/python

fname = raw_input('enter your filename like')

#fname = '/root/licmtest/test1.txt'

try:

fobj = open(fname,'r')

except ioerror,e:

print "***file open error: ", e

else:

for eachline in fobj:

print eachline,

fobj.close

**********=for迴圈的使用:

['%s%s' % (x, ls) for x in all]

>>> squared = [x ** 2 for x in range(4)]

>>> for i in squared:

... print i01

493def displaynumtype(num):

4 print num, 'is',

5 if isinstance(num, (int, long, float, complex)):

6 print 'a number of type:', type(num).__name__

7 else:

8 print 'not a number at all!!'

910 displaynumtype(-69)

11 displaynumtype(9999999999999999999999l)

12 displaynumtype(98.6)

13 displaynumtype(-5.2+1.9j)

14 displaynumtype('***')



Python檔案讀寫

今天在看python檔案讀寫操作,發現python file name mode buffering file 函式用於建立乙個file物件,它有乙個別名叫open 可能更形象一些,它們是內建函式。來看看它的引數。它引數都是以字串的形式傳遞的。name是檔案的名字。mode 是開啟的模式,可選的值為...

python檔案讀寫

檔案讀寫模式 模式 描述 r以讀方式開啟檔案,可讀取檔案資訊。w以寫方式開啟檔案,可向檔案寫入資訊。如檔案存在,則清空該檔案,再寫入新內容 a以追加模式開啟檔案 即一開啟檔案,檔案指標自動移到檔案末尾 如果檔案不存在則建立 r 以讀寫方式開啟檔案,可對檔案進行讀和寫操作。w 消除檔案內容,然後以讀寫...

python 讀寫檔案

python讀寫檔案在文字不大的情況可以用正常的 open 然後讀入 readline行讀入 或者整體讀入 read readlines 基本知識 file open path,r 說明 第乙個引數是檔名稱,包括路徑 第二個引數是開啟的模式mode r 唯讀 預設。如果檔案不存在,則丟擲錯誤 w 只...