日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件操作模式扩展、游标操作

發布時間:2023/12/31 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件操作模式扩展、游标操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

with open:將文件的釋放交給with管理

with open('文件', '模式', encoding='utf-8') as f:
# 操作
pass

a模式:追加寫入

# 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+
'''

游標:必須在b模式下操作,seek中偏移的是字節

'''
百度網盤 - 秒傳
'''
'''
1. 如何使用游標:游標的相關方法
2. 游標相關的讀寫操作
3. 根據游標在大文件中取出多個指定位置的部分字節內容
'''

'''
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('慢慢傳去吧')

轉載于:https://www.cnblogs.com/zhangdajin/p/10634386.html

總結

以上是生活随笔為你收集整理的文件操作模式扩展、游标操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。