open(file, mode = 'rt')
返回乙個檔案物件,若檔案不存在則返回異常
traceback (most recent call last):
file "", line 1, in
filenotfounderror: [errno 2] no such file or directory: 'somefile.txt
函式open的引數mode的最常見取值 值
描述r讀取模式(預設值)
w寫入模式(既有內容將被刪除)
x獨佔寫入模式,在檔案已經存在時引發fileexistserror異常
a附加模式
b二進位制模式(與其他模式結合使用)
t文字模式(預設值,與其他模式結合使用)
+讀寫模式(與其他模式結合使用)
r+和w+均為可讀寫,但r+不會截斷檔案,而w+會截斷檔案
1. 檔案的讀取和寫入
>>>f = open('somefile.txt', 'w')
>>>f.write('hello, ')
7>>>f.write('world!')
6>>>f.close()
>>>f = open('somefile.txt', 'r')
>>>f.read(4)
'hell'
>>>f.read()
'o, world!'
2. 使用管道重定向輸出
這條管道線包含三個命令:
cat somefile.txt:將檔案somefile.txt的內容寫入到標準輸出( sys.stdout)。
python somescript.py:執行python指令碼somescript。這個指令碼從其標準輸入中讀取,並將結果寫入到標準輸出。
sort:讀取標準輸入( sys.stdin)中的所有文字,將各行按字母順序排序,並將結果寫入到標準輸出。
但這些管道字元( |)有何作用呢?指令碼somescript.py的作用是什麼呢?管道將乙個命令的標準輸出鏈結到下乙個命令的標準輸入。很聰明吧?因此可以認為, somescript.py從其sys.stdin中讀取資料(這些資料是somefile.txt寫入的),並將結果寫入到其sys.stdout( sort將從這裡獲取資料)
3. 隨機訪問
seek(offset[, whence])將當前位置移到offset和whence指定的地方,offset為位元組數,whence可取:
io.seek_set(0)預設,檔案開頭
io.seek_cur(1)檔案當前位置
io.seek_end(2)檔案結尾
tell()返回檔案當前位置
>>>f = open('somefile.txt', 'w')
>>>f.write('01234567890123456789')
20>>>f.seek(5)
5>>>f.write('hello, world!')
13>>>f.close()
>>>f = open('somefile.txt')
>>>f.read()
'01234hello, world!89'
>>>f.close()
>>>f = open('somefile.txt')
>>>f.read(3)
'012'
>>>f.read(2)
'34'
>>>f.tell()
5>>>f.close()
4. 讀取和寫入行
讀取readline()、readlines()
寫入writelines()
程式執行前somefile.txt中的內容為
your mother was a hamster and your
father smelled of elderberries.
your mother was a hamster and your
father smelled of elderberries.
your mother was a hamster and your
father smelled of elderberries.
your mother was a hamster and your
father smelled of elderberries.
your mother was a hamster and your
father smelled of elderberries.
>>>f = open('somefile.txt')
>>>f.readline(3)
'you'
>>>f.readline()
'r mother was a hamster and your\n'
>>>f.readlines()
['father smelled of elderberries.\n', 'your mother was a hamster and your\n', 'father smelled of elderberries.\n', 'your mother was a hamster and your\n', 'father smelled of elderberries.\n', 'your mother was a hamster and your\n', 'father smelled of elderberries.\n', 'your mother was a hamster and your\n', 'father smelled of elderberries.']
>>>f.close()
>>>f = open('somefile.txt', 'w')
>>>words = ['aaaaa', 'bbbbbb', 'ccccc', 'ddddddd']
>>>f.writelines(words)
>>>f.close()
執行完上述**後檔案somefile.txt中的內容
aaaaabbbbbbcccccddddddd
5. 關閉檔案
1)close,為確保檔案關閉,一般寫作
try:
#將資料寫入檔案中
finally:
file.close()
2)專門為此設計的語句
with open('somefile.txt') as somefile:
do_something(somefile)
with語句讓你能夠開啟檔案並將其賦給乙個變數(這裡是somefile)。在語句體中,你將資料寫入檔案(還可能做其他事情)。到達該語句末尾時,將自動關閉檔案,即便出現異常亦如此。
如果不寫入檔案,並非一定要關閉檔案
def process(string):
print('processing:', string)
1. 每次乙個字元(或位元組)
with open(filename) as f:
char = f.read(1)
while char:
process(char)
char = f.read(1)
with open(filename) as f:
while true:
char = f.read(1)
if not char: break
process(char)
2. 每次一行
with open(filename) as f:
while true:
line = f.readline()
if not line: break
process(line)
3. 讀取所有內容(檔案不太大的情況)
#f.read()不帶引數,將整個檔案讀取到乙個字串中
with open(filename) as f:
for char in f.read():
process(char)
#readlines方法將檔案讀取到乙個字串列表中,其中每個字串是一行
with open(filename) as f:
for line in f.readlines():
process(line)
4. 使用fileinput實現延遲行迭代
有時候需要迭代大型檔案中的行,此時使用readlines將占用太多記憶體。當然,可以結合使用while迴圈和readline,但在python中,在可能的情況下,應首選for迴圈,而這裡就屬於這種情況。可以使用一種名為延遲行迭代的方法——說它延遲是因為它只讀取實際需要的文字部分。
import fileinput
for line in fileinput.input(filename):
process(line)
5. 文字迭代器(最常見的方法,因為文字是可迭代的)
with open(filename) as f:
for line in f:
process(line)
如果不對檔案進行寫操作,那麼可以不對檔案進行關閉或使用with(即將檔案作為上下文管理器)
for line in open(filename):
process(line)
sys.stdin(即標準輸入)也是可以迭代的,因次可以這樣做:
import sys
for line in sys.stdin:
process(line)
第11章 執行緒
執行緒標識 就像每個程序有乙個程序id一樣,每個執行緒也有乙個執行緒id。程序id在整個系統中是唯一的,但執行緒id不同,執行緒id只有在它所屬的程序上下文中才有意義。程序id 用pid t資料型別表示 執行緒id用pthread t資料型別來表示 includeint pthread equal ...
第11章 執行緒
1.執行緒的作用 1 對於程式設計而言 當我們的乙個程序在某一時刻,需要做的事件不止一件的時候,一般有兩種方法。一種是採用非同步程式設計的模式,一種是採用多執行緒同步模式。但是多執行緒同步模式遠遠比非同步模式要方便的多。但是對於單核系統,往往非同步程式設計模式效率更高。2 對於互動程式,一般都是要多...
第11章 函式
1 把相關的語句組合在一起,並且賦予相應的名稱,用這種方法來給程式分塊,這種形式的組合就是函式,函式也叫例程或者過程。程式總是從 main 函式開始啟動。函式由函式名 引數 返回值型別以及一組包含操作語句的語句塊組成。函式可以支援過載,程式就是由函式組成。2 形參是函式定義時在形參表中定義的,並且由...