Python學習筆記 6 檔案

2021-07-10 04:13:20 字數 4416 閱讀 4537

要開啟的檔案應該儲存在你執行的python程式同乙個資料夾下。

這個檔案儲存在你啟動python時所在的那個資料夾。

>>> fhand = open('mbox.txt')

>>> print fhand

如果檔案成功被開啟, 作業系統會返回乙個檔案控制代碼。

如果檔案不存在, 開啟失敗, 輸出追蹤錯誤資訊。

文字檔案可視為若干文字行的序列,這與python字串是字元的序列道理相同。

郵件交流:檔案中包含多條郵件, 遵守一種標準格式。 以「from 」開頭的行是每一條郵件第一行, 以「from:」 開頭的行是郵件的一部分, 注意區分。

將文字檔案分解成文字行,「一行的結束」用專門的字元來表示, 稱為換行符。常用換行符 \n 。

雖然檔案控制代碼並不包含檔案的資料, 但它可以方便地構建乙個for迴圈, 按行依次讀取檔案。

fhand = open('mbox.txt')

count = 0

for line in fhand:

count = count + 1

print 'line count:', count

python open.py

line count: 132045

for迴圈中檔案控制代碼被當做序列來使用。 for迴圈只是簡單地計算並輸出檔案的行數。可翻譯成:「每遇到檔案中的一行( 表示為檔案控制代碼) , 將count變數值加一」。

以for迴圈這種方式讀取檔案時, python根據換行符將檔案資料分成若干文字行。 每次迭代中將換行符作為一行的最後乙個字元。

如果檔案大小相對於記憶體容量來說很小, 那麼就可以把它當做乙個字串, 在檔案控制代碼上使用read方法一次性讀取進來。

>>> fhand = open('mbox-short.txt')

>>> inp = fhand.read()

>>> print len(inp)

94626

>>> print inp[:20]

from stephen.marquar

以這種方式讀取檔案時, 所有的文字行和換行符被當做乙個整體, 作為乙個大字串儲存在inp變數中。 只有當計算機記憶體能夠承載檔案資料大小的情況下, 才能用這種方式開啟檔案。

將檔案讀取與字串方法結合。

例, 讀取乙個檔案並把以「from:」開頭的行列印出來。 我們可以使用字串startswith方法來選擇符合字首要求的行。

fhand = open('mbox-short.txt')

for line in fhand:

if line.startswith('from:') :

print line

from: [email protected]

from: [email protected]

from: [email protected]

from: [email protected]

每一行都以換行符結束, 因此print語句輸出的變數line中的字串帶有乙個換行符print輸出時本身還會增加乙個換行符。所以會出現空行。…

我們可以使用字串分割來列印出不含最後乙個字元的文字行, 不過還有乙個更簡單的辦法, 使用rstrip方法截掉字串後面的空白符, 程式**如下所示:

fhand = open('mbox-short.txt')

for line in fhand:

line = line.rstrip()

if line.startswith('from:') :

print line

程式執行結果如下:

from: [email protected]

from: [email protected]

from: [email protected]

from: [email protected]

...

continue語句來編寫搜尋迴圈的思路: 搜尋迴圈的基本思路是尋找「感興趣的」行,跳過「不感興趣的」行。 當找到感興趣的的文字行, 執行相應的操作。

fhand = open('mbox-short.txt')

for line in fhand:

line = line.rstrip()

# skip 'uninteresting lines'

if not line.startswith('from:') :

continue

# process our 'interesting' line

print line

用find方法模擬文字編輯器查詢功能:

find方法可以尋找乙個字串在另乙個字串中出現的次數, 也可以返回字串的位置或-1( 表示字串沒有找到)。編寫乙個迴圈, 找到包含「@uct.ac.za」字串的文字行。

fhand = open('mbox-short.txt')

for line in fhand:

line = line.rstrip()

if line.find('@uct.ac.za') == -1 :

continue

print line

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

fhand = open(fname)

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

try:

fhand = open(fname)

except:

print 'file cannot be opened:', fname

exit()

count = 0

for line in fhand:

if line.startswith('subject:') :

count = count + 1

print 'there were', count, 'subject lines in', fname

exit()函式會終止程式, 這個程式永不返回值。 質量保障(qa)。

為了能夠寫入檔案, 需要在開啟檔案時使用「w」作為第二個引數

>>> fout = open('output.txt', 'w')

>>> print fout

如果檔案已經存在, 以寫入模式開啟檔案, 這樣會刪除舊資料, 因此請謹慎使用。 如果檔案不存在, 那麼會建立乙個新的檔案。

檔案控制代碼物件的write方法把資料寫入檔案。

>>> line1 = 'this here's the wattle,\n'

>>> fout.write(line1)

結束一行時, 確保已明確插入了換行符。 print語句會自動加上乙個換行符, 而write方法不會這樣做。

>>> line2 = 'the emblem of our land.\n'

>>> fout.write(line2)

當檔案寫入完成, 記得關閉檔案, 確保寫入物理磁碟, 這樣斷電後資料才不會丟失。

>>> fout.close()
讀方式開啟檔案也要記得關閉檔案。 只顧開啟新檔案就顯得有點粗心大意了。 python會在程式結束時, 確認所有開啟的檔案被關閉了。 當寫入檔案時, 我們要對檔案關閉進行明確宣告, 確保萬無一失。

內建函式repr可以解決空格符、 製表符和換行符等空格帶來的問題。 它將任一物件作為引數, 返回該物件的乙個字串表示。 這對除錯很有幫助。

>>> s = '1 2\t 3\n 4'

>>> print s

1 2 3

4>>> print repr(s)

'1 2\t 3\n 4'

Python學習筆記 6 檔案操作

一 檔案讀寫 操作順序如下 1先要有個檔案。2開啟檔案。3操作檔案。讀或者寫。4關閉檔案 開啟模式有三種,唯讀模式 r,寫模式 w 會清空原有內容 追加模式 a。沒有指定的話預設為唯讀模式。在同一資料夾下,可直接寫檔名。如果在其他位置,需要寫詳細路徑。例 f open users.txt a enc...

Python3 3 學習筆記6 檔案

使用open開啟檔案後一定要記得呼叫檔案物件的close 方法。比如可以用try finally語句來確保最後能關閉檔案。不能把open語句放在try塊裡,因為當開啟檔案出現異常時,檔案物件file object無法執行close 方法。開啟檔案 open 路徑 檔名,讀入模式,快取區 後面兩項可選...

Linux學習筆記(6) 檔案I O

持續乙個禮拜的出差終於結束了,本次出差真是收益良多,不僅品嚐了正宗的大閘蟹,同時也是第一次體驗了產品的現場實施流程。明天開始繼續學習linux!分割線 因為各種原因,已經有十天沒有更新了,真是太不應該了,以後一定杜絕這種懶惰 無恥的情況!分割線 古話說得好,在linux之下,一切皆是檔案。有很多資源...