7 檔案操作方法

2022-06-16 02:48:10 字數 4688 閱讀 5131

執行python的三個步驟

1、啟動python直譯器

2、直譯器將test.py的內容從硬碟讀入記憶體

3、直譯器執行剛剛讀入記憶體的**,識別python語法,比如 x='上'

編碼                     編碼

字元-------------------->unicode------------->其他編碼

解碼 解碼

字元<--------------------unicode<-------------其他編碼

print(x)

res = x.encode("gbk")

print(type(res))>>>>>>>>強調:在python3裡,只會將unicode格式的數字轉成字元,其餘編碼格式的數字均不會轉換

print(res)

print(res.decode("gbk"))>>>>>>>b'\xc9\xcf'

r:唯讀(預設的) 不能進行寫操作

w:只寫---檔案存在內容則會在開啟的瞬間清空,檔案不存在就會建立乙個檔案

a:只追加寫,開啟檔案後指標會移動到檔案的末尾,不會刪除資料,只會在後面寫

t:控制讀寫的內容都是字串型別(預設的)

特點:2、一定要指定encoding的引數

b:控制讀寫的記憶體都是bytes型別

2、一定不要指定encoding引數

####r: 檔案不存在則報錯,存在指標會跳到檔案的開頭進行讀取檔案

```f = open(r'a.txt',mode='rt',encoding='utf-8')

print(f.read())

f.close()>>>>>>**作業系統資源

####w:檔案不存在會建立空文件,存在會清空內容,指標跳到開頭(切記不要用w開啟關鍵資料

```f = open(r'b.txt',mode='wt',encoding='utf-8')

f.write("你好啊1\n")

f.write("你好啊2\n")

f.write("你好啊3\n")

f.clujinlose() 開啟了

檔案不關閉的情況下,新寫入的內容永遠跟在老內容之後

####a:檔案不存建立空文件,存在會跳到末尾,在後面追加寫,比如用來訪問使用者的賬戶、

```f = open(r'c.txt',mode='at',encoding='utf-8')

檔案不管是否關閉,開啟指標都會跳到最後

了解:讀寫模式(可讀可寫,很少用到)

r+t、w+t、a+t

例如:r+t模式

f = open(r'c.txt',mode='r+t',encoding='utf-8')

print(f.readable())

print(f.writable())

print(f.read())

f.write("h")

f.close()

####with功能 b模式

```with open('1.mp4',mode='rb') as f:

print(f.read())>>>>>>>一次性讀取所有,若是檔案過大會導致記憶體卡死,崩潰

for line in f: >>>>>>>一行一行的讀取,不會占用大量記憶體

print(line)

with open('1.mp4',mode='rb')as f ,open(r'2.mp4',mode='2b')as new_f:

for line i f: # 迴圈f line是讀一行

new_f.write(line) #把讀到的一行 寫入new_l裡面去,一行一行讀寫,有效的節省記憶體空間

```

with open('d.txt',mode='wb') as f:

msg = "你好"

f.write(msg.encode('utf-8'))>>>>>wb格式寫入需要編碼成utf-8 不然會亂碼

```

with open('a.txt',mode='rt',encoding='utf-8')as f:

res = f.read()

print(res)>>>>>>正常讀出a.txt內文字內容

res = f.read

print(res)>>>>>>輸出空白,在我呢見沒有關閉是情況下,前面的f.read已經將指標移動到了末尾,所以再讀就讀不到內容了

f.readline().......一行一行的讀取

f.readlines()........全部讀取到乙個列表中

with open('a.txt',mode='wt',encoding='utf-8') as f:

lines = ['aaa\n',"bbbb\n","cccc\n"]

for line in lines

f.write(line)

等同於 f.writelines(lines)

不同的是 write.('hello) 是直接把整個字串直接寫入

而 writelines.('hello')是乙個字母乙個字母的寫入

了解:

f.flush(),因為檔案的寫入是隔一段時間寫入一次,非常急用的檔案可以用 flush()立即寫入

print(f.close)判斷檔案是否關閉

print(f.name) 檔案的名字

####只有在 t 模式下的read(n)代表的是字元個數(utf-8中乙個英文本元乙個位元組、乙個中文字元三個位元組),除此以外都是位元組個數

```

with open('a.txt',mode='rt',encoding = 'utf-8') as f:

res = f.read(6)

print(res) t模式.read(6)代表6個字元,所以正常輸出

with open('a.txt',mode='rb') as f:

res = f.read(6)

print(res) >>>b'hello\xe4\xbd\xa0' 會列印bytes格式

print(res.decode('utf-8'))>>>>解碼成』utf-8'格式就可正常讀出

with open('a.txt',mode='at',encoding='utf-8') as f:

f.truncate(6)>>>>>hello� 截斷內容,若是碰到中文三個位元組,剛好截了乙個或兩個位元組就會亂碼

###主動控制指標的移動

####f.seek(移動位元組的個數,模式)

模式有三種:

0:永遠參照檔案的開頭

1:參照指標所在的當前位置

2:永遠參照檔案末尾

####注意:只有0模式可以在 t 模式下使用,1 和 2 只能在b模式下使用

```with open('a.txt',mode='rt',encoding='utf-8') as f:

f.seek(3,0) >>>參照檔案開頭,向右移動 3 個位元組

f.seek(5,0)

print(f.tell())告訴指標所在位置

with open('a.txt',mode='rb')as f:

f.seek(-3,2)>>>>參照檔案末尾,-3 是向左移動 3 個位元組

print(f.tell())>>>>檔案的長度是從開頭到指標處

####1、先將檔案的內容全部的讀入記憶體

####2、在記憶體中完成修改

####3、在修改後的內容覆蓋回原始檔

```ps:耗費記憶體不耗費硬碟

with open('e.txt',mode='rt',encoding='utf-8')as f:

data = f.read()>>>>先讀到記憶體

with open('e.txt',mode='wt',encoding='utf-8')as f1:

f1.write(data.replace('liu','liu') 在記憶體修改後,在覆蓋到檔案中

###修改的方式二、

####1、以讀的方式開啟檔案,然後以寫的方式開啟乙個臨時檔案

####2、讀原始檔的一行內容到記憶體,然後在記憶體中修改完畢後在寫入臨時檔案

####3、刪除原始檔,將臨時檔案重新命名為原始檔

ps:耗費硬碟不耗費記憶體

import os

with open('e.txt',mode='rt',encoding='utf-8') as scr_f,

open('.e.txt.swp',mode='wt',encoding='utf-8') as dst_f:

for line in scr_f:

dst_f.write(line.replace('liu','liu')

一行一行的修改後存到新的資料夾,極少的占用記憶體

os.remove('e.txt') >>> 刪除原始檔

os.rename('e.txt.swp','e.txt')>>>>.修改新檔名變為原檔案

7 檔案的基本操作

1.檔案的開啟模式w write 寫入模式 只能寫入字串和位元組流 檔案不存在則建立檔案,存在的話則開啟清空內容,並且將檔案指標放在檔案的開頭 r read 讀取模式 檔案不存在則報錯 存在的話則開啟檔案,並且將檔案指標放在檔案的開頭 檔案不存在則建立檔案,存在的話則開啟檔案,並且將檔案指標放在檔案...

檔案操作方法

1 讀系列 2 寫系列 需要注意的是 1 一次性讀完以後,游標停留在了檔案末尾,無法再次讀取內容 2 該方法在讀取大檔案的時候,可能會造成記憶體溢位的情況。解決上述問題的策略就是逐行讀取檔案內容。以後涉及到多行檔案內容的情況一般都採用for迴圈讀取。1 t 文字模式 文字模式是檔案操作的預設模式 r...

檔案操作方法

目錄 f.read讀取所有檔案的時候,如果是小檔案還好,如果是資料特別大得到檔案,就問造成記憶體溢位從而導致電腦宕機 t 文字模式 1.預設的模式 r w a rt wt at 2.該模式所有操作都是以字串基本單位 文字 3.該模式必須要指定encoding引數 4.該模式只能操作文字檔案 b 二進...