Python(12)萌新也能看懂之 檔案讀寫

2021-08-11 01:21:28 字數 4078 閱讀 5022

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 > 2true,因此讀取完第一行後會停止下來,直到下次呼叫的時候才會繼續讀取。

如果引數為3,那麼讀取完第一行發現3 > 3false,因此會繼續讀取第二行。

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'的時候,才可以為12。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 中就以 的形...