要開啟的檔案應該儲存在你執行的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之下,一切皆是檔案。有很多資源...