檔案基礎 三)

2022-05-15 21:48:13 字數 2635 閱讀 9901

檔案內指標移動是以位元組位單位的,唯獨t模式下的read讀取的內容個數是以字元為單位的

f.read(3)

rt讀 指標指向開頭 讀取漢字

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

res=f.read(3)#從頭開始讀讀三個字元

print(res)

rb讀 指標指向開頭 讀取byte 3個byte就是乙個漢字

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

res=f.read(3)

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

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

模式控制:

0:預設模式,該模式代表指標移動的位元組數是檔案以開頭為參照的

1:該模式代表指標移動的位元組數是以當前所在的位置為參照的

2:該模式代表指標移動的位元組數是以檔案末尾的位置為參展的

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

f.tell()檢視檔案指標當前距離檔案開頭的位置

0模式詳解:

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

f.seek(4, 0)

print(f.tell())

print(f.read())

在b模式的0模式讀取檔案內容

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

f.seek(4, 0)

print(f.tell())

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

1模式詳解:

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

f.seek(3,1)

print(f.tell())

f.seek(4,1)

print(f.tell())

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

2模式詳解

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

f.seek(-9,2)#倒著讀 2模式

data=f.read()

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

#tail -f access.log

檔案裡寫日誌

import time

#print(time.strftime('%y-%m-%d %x'))

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

f.write('%s 下雨了\n' %time.strftime('%y-%m-%d %x'))

對檔案的時時監控輸出

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

f.seek(0,2)

while true:

line=f.readline()

if len(line)==0:

continue

else:

print(line.decode('utf-8'), end='')

須知一:

硬碟空間無法修改 硬碟中的資料更新都是用新的內容覆蓋舊的內容

記憶體控制可修改

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

f.seek(4,0)

print(f.tell())

f.write('我的')

內容直接覆蓋 硬碟不能修改 都是用新的內容把原來之前的內容都覆蓋掉

須知二:

檔案對應的是硬碟空間,硬碟不能改應為檔案本質也不能修改之所以我們看到檔案的內容可以修改 是如何實現呢

大的思路:將硬碟中檔案內容讀入記憶體 然後再記憶體中修改完畢後再覆蓋

具體實現方式分為兩種

1.將檔案內容一次性全部讀入記憶體 然後在記憶體中修改完畢後再覆蓋寫回原始檔

優點:在檔案修改過程中同乙份資料只有乙份

缺點:如果檔案夠大會過多的占用記憶體

替換檔案內容

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

data=f.read()

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

f.write(data.replace('abc','sb'))

2.以讀的方式開啟原檔案,以寫的方式開啟乙個臨時檔案。。刪掉原檔案

優點:不會占用過多的記憶體

缺點:在檔案修改過程中 同乙份資料存了兩份

import os

with open('.txt',mode='rt',encoding='utf-8') as read_f,open('1.txt',mode='wt',encoding='utf-8') as write_f:

for line in read_f:

write_f.write(line.replace('sb','abc'))

os.remove('.txt')

os.rename('1.txt','.txt')

檔案過大用方式2 檔案不大用方式1

NDK基礎三 JNI 檔案拆分

jni中對檔案的操作是很方便的,也是比較常用,主要使用到fopen以及fputc fgetc等 獲取sdcard路徑 private static final string sd card path environment.getexternalstoragedirectory getabsolut...

Linux基礎(三)檔案許可權

chown 擁有者 檔案 目錄 r 遞迴修改 chgrp 擁有者 檔案 目錄 r 遞迴修改 1.3.1 加減法 u g o 例 chmod u rwx,g rwx 檔案 目錄 1.3.2 數字法 數字法 r 4,w 2,x 1。例 chmod 777 檔案 目錄 rwx 7,rw 6,r 4,r x...

bash基礎之三配置檔案

1 互動式登入 1 直接通過終端輸入賬號密碼登入 2 使用 su username 或 su l username 切換的使用者 執行順序 etc profile etc profile.d sh 所有檔案 bash profile 使用者家目錄下的 bashrc etc bashrc 2 非互動式...