Python基礎11 檔案處理補充

2021-10-08 04:17:26 字數 4733 閱讀 7772

python基礎11——檔案處理補充

檔案操作的簡單方法

控制檔案內指標的移動

檔案開啟模式分類兩大類

1、 r:唯讀

在檔案不存在時則報錯,檔案存在時檔案指標會跳到檔案開頭

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

res = f.read()

print(f.readable())

print(f.writable())

f.close()

2、 w:只寫

在檔案不存在時則建立空檔案,檔案存在時則清空檔案指標跳到檔案開頭

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

f.write("egon:123")

f.close()

3、a:只追加寫

在檔案不存在時則建立空檔案,檔案存在時不會清空,檔案指標跳到檔案末尾

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

f.write("jason:777\n")

f.close()

總結:w與a的異同

相同點: 在開啟了檔案不關閉的情況下,連續的寫入,新的內容永遠跟內容

不同點:重新開啟檔案,w會清空老的內容,而a模式會保留老的內容並且指標跳到檔案末尾

1、 t

讀寫都是以str字串為單位,一定要指定encoding

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

#f.read()

#f.close()

2、 b

讀寫都是以bytes為單位

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

data = f.read()

#print(data.type(data))

print(data.decode('utf-8'))

f.close()

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

f.write("egon".encode('utf-8'))

f.close()

示範1:檔案拷貝程式

src_file = input("原始檔路徑:").strip()

dst_file = input("目標檔案路徑:").strip()

f = open(r"%s" %src_file,mode='rb')

data = f.read()

f.close()

new_f = open(r"%s" %dst_file,mode='wb')

new_f.write(data)

new_f.close()

#上下問管理with方式

src_file = input("原始檔路徑:").strip()

dst_file = input("目標檔案路徑:").strip()

with open(r'%s' %src_file,mode='rb') as src_fobj,open(r'%s' %dst_file,mode='wb') as dst_fobj:

# data=src_fobj.read()

for line in src_fobj: # line=第二行內容

dst_fobj.write(line)

了解:

+模式:+不能單獨使用,必須配合r、w、a

r+模式:檔案不存在,則會報錯

w+模式:檔案不存在,則會建立新檔案

r+模式:檔案不存在,則會報錯

f.read() # 讀取所有內容,執行完該操作後,檔案指標會移動到檔案末尾

f.readline() # 一次讀取一行內容,游標移動到第二行首部

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

# line1 = f.readline()

# line2 = f.readline()

# line3 = f.readline()

# print(line1)

# print(line2)

# print(line3)

# lines =

# for line in f:

lines = f.readlines()

print(lines)

強調:

f.read()與f.readlines()都是將內容一次性讀入內容,如果內容過大會導致記憶體溢位,若還想將內容全讀入記憶體,則必須分多次讀入,有兩種實現方式:

方式一

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

for line in f:

print(line) # 同一時刻唯讀入一行內容到記憶體中

方式二

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

while true:

data=f.read(1024) # 同一時刻唯讀入1024個bytes到記憶體中

if len(data) == 0:

break

print(data)

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

# lines = ['111\n','222\n','333\n']

# for line in lines:

# lines.write(line)

# f.writelines()

f.writelines("hello")

了解

f.readable() # 檔案是否可讀

f.writable() # 檔案是否可讀

f.closed # 檔案是否關閉

f.encoding # 如果檔案開啟模式為b,則沒有該屬性

f.flush() # 立刻將檔案內容從記憶體刷到硬碟

都是以位元組為單位的,只有乙個特殊情況

t模式下的read(n)#代表的是n個字元,其餘的都是位元組

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

data=f.read(6) # 6個字元

print(data)

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

# data=f.read(6) # 6個位元組

data=f.read(8) # 8個位元組

print(data.decode('utf-8'))

f.seek(指標移動的位元組數,模式控制):

模式控制:

0:參照檔案的開頭開始移動(只有0模式可以在t下使用,1和2模式只能在操作需要)

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

f.seek(5,0)

print(f.tell())

print(f.read(9))

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

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

f.seek(3,1)

f.seek(3,1)

print(f.tell())

# f.seek(2,1)

f.seek(5,0)

print(f.read().decode('utf-8'))

2:該模式參照檔案末尾的位置

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

f.seek(0,2)

f.seek(-3,2)

# print(f.tell())

print(f.read().decode('utf-8'))

強調:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用

f.truncate(n)從檔案開頭往後數n個位元組保留下來,其餘全部刪除

f.truncate()從檔案開頭往後數指標當前所在的位置,其餘全部刪除

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

# f.truncate(3)

# f.seek(-3,2)

f.truncate()

python學習11 檔案,流

開啟檔案 語法如下 open name,module buffering 模式 和緩衝引數都是可選的 f open r c text somefile.txt 如果檔案不存在traceback most recent call last file line 1,in f open r c text ...

python學習11 檔案操作

1.檔案 open file,mode r buffering 1,encoding none,errors none,newline none,closefd true,opener none file 檔案路徑 其中雙斜槓表示轉義也可以用反斜槓代替這兩個斜槓。mode 開啟方式 其中 w表示先將...

Python資料科學基礎(七) 檔案處理

檔案處理 1.檔案操作三步走 開啟 讀寫 關閉。open file,mode r buffering 1,encoding none,errors none,newline none,closefd true,opener none 2.檔案開啟模式模式 說明r讀模式 預設模式,可省略 如果檔案不存...