file = open(『./child.py』, 『r』)開啟child.py檔案。
第二個引數'r'
表示以文字模式讀取。'rb'
表示以二進位制格式讀取,有些功能只能在二進位制格式時使用。
除此之外,還有其他選項:
**引自菜鳥教程 模式
描述r以唯讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。
rb以二進位制格式開啟乙個檔案用於唯讀。檔案指標將會放在檔案的開頭。這是預設模式。
r+開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。
rb+以二進位制格式開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。
w開啟乙個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
wb以二進位制格式開啟乙個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
w+開啟乙個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
wb+以二進位制格式開啟乙個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
a開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
ab以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
a+開啟乙個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。
ab+以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。
比較需要特別注意的是:
一般讀取文字檔案,用'r'
就可以了;
寫入和讀取,都有乙個檔案指標,這個決定檔案從**開始讀、寫(下面細說);
'w'
系列,只適合對新檔案進行處理。如果你對已有檔案進行處理的話,很遺憾,原檔案的內容會被清空;
對已有檔案進行追加的處理,應採用'a'
系列,他會自動從原檔案的末尾開始處理。如果該檔案不存在,那麼會建立乙個新檔案;
除此之外還有引數:
encoding='gbk'
讀取gbk編碼的檔案;
str = file.read()讀取全部
str = file.readline()讀取一行(注意:這個會帶上最後那個換行符)
解決掉換行符的方法是:file.readline().strip()
,會扔掉字串前、後的空白符(比如空格、或者換行符)。
str = file.readlines()讀取所有行,這個返回的是list。
關於readlines
這個api的解釋:
可以加引數,表示單次讀取的最大位元組數。
每次讀完一行都會判斷一下,如果已讀取的位元組數大於這個數字的時候,就停止讀取。
例如第一行是ab
外加乙個位元組換行符(相當於3個位元組),
那麼引數為2
的時候,讀取完第一行發現已讀取3個位元組,3 > 2
為true
,因此讀取完第一行後會停止下來,直到下次呼叫的時候才會繼續讀取。
如果引數為3
,那麼讀取完第一行發現3 > 3
為false
,因此會繼續讀取第二行。
flie.close()記得一定要關閉檔案。
with
open('./child.py', 'r') as f:
print(f.read())
這個會自動幫你呼叫f.close()
,但唯一問題是,他不會幫你處理異常。
所以可以用以下方法解決:
try:
with open('./abc.py', 'r') as f:
print(f.readline().strip())
except exception as e:
print('檔案開啟失敗,原因是:', e)
輸出:
檔案開啟失敗,原因是: [errno 2] no such file
ordirectory: './abc.py'
在檔案指標處開始寫入。
因為'w'
會覆蓋原檔案,因此預設是在檔案開頭,而'a'
會在原檔案末尾進行追加,因此預設是從原檔案末尾開始。
file.write(str)注意,引數必須是字串,數字是不行的,如果是數字,可以用
str()
強制轉換為字串使用。
f.tell()返回值是數字(int)。
幾個比較重要的概念:
檔案的開頭是0。('r'
模式開啟,還沒有呼叫read方法);
讀取和寫入,都是從當前檔案指標所在位置開始;
可以理解為list,第乙個元素(位元組)的位置為0,第二個為1,如果想從第二個位元組開始讀/寫,那麼應先把檔案指標移動到f.tell()
的返回值為1
的地方;
'a+'
模式固定在檔案末尾追加,因此無論tell()
返回多少,或者移動檔案指標,都不影響他從檔案末尾開始寫。
f.seek(移動位元組數, 可選相對位置)第乙個指移動相對於參考位置的位置;(結合第二個引數理解)
第二個是可選的,預設為0(即檔案開頭)。只有當讀取模式裡有'b'
的時候,才可以為1
或2
。1表示從當前檔案指標位置,2表示從檔案末尾。
假如引數為(1,0)
或(1)
,那麼表示將檔案指標移動到第二個位元組的位置;
如**:
with open('./test.txt', 'r') as f:
print(f.tell())
f.seek(1)
print(f.tell())
f.seek(1)
print(f.tell())
# 0# 1
# 1
假如open的時候,模式帶b
,即表示以位元組的形式讀取,那麼引數二可以為非0引數。
例如,引數為(1, 1)
,那麼會相對於當前檔案指標位置移動。如**:
with open('./test.txt', 'rb') as f: # 第二個引數多'b'
print(f.tell())
f.seek(1)
print(f.tell())
f.seek(1, 1) # 這行不同
print(f.tell())
# 0# 1
# 2
當第二個引數為2的時候,表示從檔案末尾開始計算(即最後乙個字元的下乙個位置,例如假如只有3個字元,那麼最後乙個字元的下乙個位置就是3)
## test.txt
123## test.py
with
open('./test.txt', 'rb+') as f:
f.seek(0, 2)
print(f.tell())
f.write(b'4')
# 3## test.txt
1234
js模板引擎 萌新也能看懂的模板引擎
從乙個實際需求出發認識模板引擎 實現乙個模板引擎的思路及步驟 當我們需要用js渲染乙個歌曲列表的時候,由於資料需要向後端請求,所以實現不能在html中把資料寫死。如下所示,我們需要在頁面上展示這樣乙個列表,但是卻不能像下面一樣把資料寫死在li標籤中。這個時候有兩種我們容易思考得到的方法來解決這個問題...
python高階 小白也能看懂 生成器與迭代器
第二篇 2 什麼是生成器與迭代器 3 參考 先給出生成器與迭代器的例子,然後詳細講解需要理解的知識。生成器 a i 1for i in range 10 列表推導式,不是生成器 b i 1for i in range 10 生成器 defgenerator n z 1while zz 1yield ...
零基礎也能看懂的python內建csv模組教程
目錄 它是一種檔案格式,一般也被叫做逗號分隔值檔案,可以使用 excel 軟體或者文字文件開啟 其中資料字段用半形逗號間隔 也可以使用其它字元 使用 excel 開啟時,逗號會被轉換為分隔符。csv 檔案是以純文字形式儲存了 資料,並且在相容各個作業系統。例如下面的文字,在 excel 中就以 的形...