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...