python之 檔案的操作
阿新 • • 發佈:2022-03-15
本章內容
- 檔案內游標的移動
- 檔案資料修改
- 函式簡介
- 函式的語法結構
檔案內游標的移動
# 1. 檔案內容的讀取,游標移動 eg:
with open(r'1.txt','r',encoding='utf8') as f:
print(f.read(3))
print(f.read(3))
# 在文字模式下,括號內的數字表示的是讀取指定的字元個數
"""
如下圖所示:
綠色的箭頭表示第一個print輸出後游標所在的位置
紅色的箭頭表示第二個print輸出後游標所在的位置
"""
# 在二進位制模式下,read括號內的數字表示的是讀取指定的位元組數 eg: with open(r'1.txt', 'rb') as f: print(f.read(9).decode('utf8')) print(f.read(3).decode('utf8'))
# unicode 中所有的字元都是用2bytes來起步表示
# utf8中,中文用3bytes來表示 英文用1bytes來表示
# 2. 控制游標的移動
with open(r'1.txt', 'r',encoding='utf8') as f:
print(f.read(2))
f.seek(3, 0)
print(f.read(2))
# 錯誤示例
# with open(r'a.txt', 'rb') as f: # print(f.read(3).decode('utf8')) # # f.seek(3, 1) # 基於當前位置 繼續往後移動三個位元組 # f.seek(-3, 2) # 基於檔案末尾 往前移動三個位元組 # print(f.tell()) # 獲取游標基於檔案開頭的位元組數 # print(f.read().decode('utf8')) """記得文字檔案用b模式的時候要注意文字內容的末尾是否有空格和空行,不然可能查詢不到"""
# 正確示例:
# 錯誤示例:
""" seek方法可以控制游標的移動 在文字模式下移動的單位也是位元組數 模板: seek(offset,whence) offset (控制偏移的位元組數) whence (控制模式(0, 1, 2)) 0: 相對於檔案開頭(讓游標先移動到檔案開頭) 支援文字模式和二進位制模式 1:相對於當前位置(讓游標先停留在當前位置) 只支援二進位制模式 2:相對於檔案結尾(讓游標先移動到檔案末尾) 只支援二進位制模式 """
實際應用
# 實時檢測檔案內是否有新增的內容並打印出來
with open('access.log', mode='rb') as f:
f.seek(0, 2)
while True:
line = f.readline()
if len(line) == 0:
# 沒有內容
pass
else:
print(line.decode('utf-8'), end='')
檔案資料修改
"""
檔案資料在硬碟上其實是刻死 不可能從中間再新增新的內容
只能將老內容移除 刻新的
"""
檔案修改方式一:
# 實現思路:將檔案內容發一次性全部讀入記憶體,然後在記憶體中修改完畢後再覆蓋寫回原檔案
# 優點: 在檔案修改過程中同一份資料只有一份
# 缺點: 會過多地佔用記憶體
eg:
with open('a.txt', mode='rt', encoding='utf-8') as f:
data = f.read()
with open('a.txt', mode='wt', encoding='utf-8') as f:
f.write(data.replace('張一蛋', 'SB'))
檔案修改方式二:
# 實現思路:以讀的方式開啟原檔案,以寫的方式開啟一個臨時檔案,一行行讀取原檔案內容,修改完後寫入臨時檔案...,刪掉原檔案,將臨時檔案重新命名原檔名
# 優點: 不會佔用過多的記憶體
# 缺點: 在檔案修改過程中同一份資料存了兩份
函式簡介
函式的使用必須遵循’先定義,後呼叫’的原則。函式的定義就相當於事先將函式體程式碼儲存起來,然後將記憶體地址賦值給函式名,函式名就是對這段程式碼的引用,這和變數的定義是相似的。
沒有事先定義函式而直接呼叫,就相當於在引用一個不存在的’變數名’。
函式的語法結構
def 函式名(引數1,引數二...):
'''文件描述'''
函式體程式碼
return 返回值
# 1. def: 定義函式的關鍵字;
# 2. 函式名:函式名指向函式記憶體地址,是對函式體程式碼的引用。函式的命名應該反映出函式的功能;
# 3. 括號:括號內定義引數,引數是可有可無的,且無需指定引數的型別;
# 4. 冒號:括號後要加冒號,然後在下一行開始縮排編寫函式體的程式碼;
# 5. """文件描述""": 描述函式功能,引數介紹等資訊的文件,非必要,但是建議加上,從而增強函式的可讀性;
# 6. 函式體:由語句和表示式組成;
# 7. return 值:定義函式的返回值,return是可有可無的。
注意事項
"""
定義函式需要使用def關鍵字
定義函式的過程不會執行函式體程式碼 只會檢測語法
def s(x, y):
if 語法錯誤定義的時候就會報錯
def s():
abcdef哈哈哈 定義的時候不會報錯
呼叫函式需要使用函式名加括號
"""