檔案操作模式擴充套件 游標操作

2022-07-26 03:51:11 字數 3108 閱讀 3223

with open('檔案', '模式', encoding='utf-8') as f:

# 操作

pass

# temp.txt

# 111222333

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

f.write('new msg')

# 結果:111222333new msg

# 文字型別檔案的複製

r = open('source.txt', 'r', encoding='utf-8')

w = open('target.txt', 'w', encoding='utf-8')

for line in r: # 遍歷就是一行一行讀 取讀檔案的流

w.write(line)

w.flush() # 將寫入到記憶體中的資料重新整理到硬碟中

w.close()

r.close()

# 用with open語法如何處理?

# r+: 不會建立檔案的可讀可寫 | w+:建立清空檔案的可讀可寫 | a+:建立不清空檔案(追加)的可讀可寫

with open('source.txt', 'r', encoding='utf-8') as f1:

with open('target.txt', 'a+', encoding='utf-8') as f2:

for line in f1:

f2.write(line)

# 如果複製非文字型別的資料檔案?

# 從模式採用b模式,不需要關心編碼問題

with open('source.mp4', 'rb') as f1:

with open('target.mp4', 'wb+') as f2: # rb+ | wb | wb+ | ab | ab+

for line in f1:

f2.write(line)

'''r: 讀

w: 寫(無建立,有清空)

a: 追加(有建立的功能)

t: 文字操作(預設模式) r=>rt w=>wt a=>at

b: 非文字檔案必須採用二進位制模式來處理

+: 可讀可寫

r+: 不會建立檔案的可讀可寫 | w+:建立清空檔案的可讀可寫 | a+:建立不清空檔案(追加)的可讀可寫

rb: 二進位制讀 | wb:建立清空檔案的二進位制寫 | ab: 建立不清空檔案(追加)的二進位制寫

rb+ | wb+ | ab+

''''''

seek(偏移量, 偏移位置)

偏移位置:

0 -- 檔案開頭

1 -- 當前位置

2 -- 檔案末尾

'''# 游標讀

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

d1 = f.read(11)

print(d1)

# print(d1.decode('utf-8'))

# 當前游標的位置

print(f.tell())

# 游標操作 - 從末尾位置開始

f.seek(-3, 2)

d2 = f.read()

print(d2.decode('utf-8')) # 890

# # 游標操作 - 從當前位置開始

# f.seek(-3, 1)

# d2 = f.read()

# print(d2.decode('utf-8')) # 34567890

# # 游標操作 - 從頭開始

# f.seek(3, 0)

# d2 = f.read()

# # print(d2)

# print(d2.decode('utf-8')) # 好1234567890

# 游標寫:會覆蓋書寫

with open('source.txt', 'rb+') as f:

f.seek(11)

# print(f.read())

f.write(b'000')

print("-------------------------------------")

# 案例

with open('001.png', 'rb') as f:

data = f.read()

print(len(data))

# 在大檔案中,開頭| 1/3 | 2/3 | 末尾 各取10個位元組拼接成秒傳的資訊依據

# 形成秒傳規則

tagdata = b''

with open('001.png', 'rb') as f:

# 通過其他途徑(sys模組)來獲取檔案總大小

data = f.read()

length = len(data)

# 開頭

f.seek(0, 0)

d1 = f.read(10)

# 1/3

f.seek(length // 3, 0)

d2 = f.read(10)

# 2/3

f.seek(length // 3 * 2, 0)

d3 = f.read(10)

# 末尾

f.seek(-10, 2)

d4 = f.read(10)

tagdata = d1 + d2 + d3 + d4

# 秒傳依據

print(tagdata)

newdata = b""

with open('001.png', 'rb') as f:

data = f.read()

length = len(data)

f.seek(0, 0)

newdata += f.read(10)

f.seek(length // 3, 0)

newdata += f.read(10)

f.seek(length // 3 * 2, 0)

newdata += f.read(10)

f.seek(-10, 2)

newdata += f.read(10)

if newdata == tagdata:

print('秒傳成功')

else:

print('慢慢傳去吧')

檔案 游標操作模式詳解

w 沒有檔案新建檔案,有檔案就清空檔案 w open 1.txt w encoding utf 8 w.write 000 n w.flush 在寫入大量資料,要及時處理記憶體空間,不然記憶體可能溢位導致資料丟失 w.write 111 n w.flush 最後一次flush 操作可以省略 w.wr...

檔案游標操作

include intfseek file stream,long offset,int whence 功能 移動檔案流 檔案游標 的讀寫位置 stream 已經開啟的檔案指標。offset 根據whence來進行游標的移動,相對於游標若為正數則向右移動,負數就向左移動。如果向前移動過多超過檔案開頭...

檔案操作擴充套件

1.r 模式 r 寫入的位置是 當前游標所在位置,會直接改寫當前位置的值 r 可以續寫麼?可以,但是必須把游標挪到最後 r 沒有建立檔案的能力 r file open r.txt r encoding utf 8 r file.write bbb n r file.close r file1 ope...