1. 程式人生 > 其它 >3.15學習筆記

3.15學習筆記

檔案內的游標移動

# 1.前情提要
with open(r'a.txt','r',encoding='utf8') as f:
    print(f.read(3))
# read在文字模式下 括號內的數字表示的是讀取指定的字元個數

with open(r'a.txt', 'rb') as f:
    print(f.read(9).decode('utf8'))
# read在二進位制模式下 括號內的數字表示的是讀取指定的位元組數
# 2.具體控制
 seek方法可以控制游標的移動 在文字模式下移動的單位也是位元組數
    seek(offset,whence)
        offset:控制移動的位元組數
        whence:控制模式
            0:相對於檔案開頭(讓游標先移動到檔案開頭)
                支援文字模式和二進位制模式
            1:相對於當前位置(讓游標先停留在當前位置)
                只支援二進位制模式
            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'))

檔案的修改

 with open(r'b.txt', 'r+t', encoding='utf-8') as f:
     f.seek(9)  # 不寫模式 預設是0模式  基於檔案開頭 並且相容文字和二進位制
     f.write('<嘀嘀嘀>')
"""
檔案資料在硬碟上其實是刻死 不可能從中間再新增新的內容
只能將老內容移除 刻新的
"""
 實現思路:將檔案內容發一次性全部讀入記憶體,然後在記憶體中修改完畢後再覆蓋寫回原檔案
# 優點: 在檔案修改過程中同一份資料只有一份
# 缺點: 會過多地佔用記憶體
 with open('b.txt', mode='r', encoding='utf-8') as f:
     data = f.read()
 with open('b.txt', mode='w', encoding='utf-8') as f:
     f.write(data.replace('張三','李四'))

 實現思路:以讀的方式開啟原檔案,以寫的方式開啟一個臨時檔案,一行行讀取原檔案內容,修改完後寫入臨時檔案...,
 刪掉原檔案,將臨時檔案重新命名原檔名(狸貓換太子)
# 優點: 不會佔用過多的記憶體
# 缺點: 在檔案修改過程中同一份資料存了兩份
import os  # 模組(後面會學)

with open('b.txt', 'r', encoding='utf-8') as read_f, \
     open('.b.txt.swap', 'w', encoding='utf-8') as wrife_f:
    for line in read_f:
        wrife_f.write(line.replace('jason', 'jerry'))
os.remove('b.txt')  # 刪除檔案
os.rename('.b.txt.swap', 'b.txt')  # 重新命名檔案

函式

# 什麼是函式
	函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段。
	函式能提高應用的模組性,和程式碼的重複利用率。你已經知道Python提供了許多內建函式,比如print()。但你也可以自己建立函式,這被叫做使用者自定義函式。

定義規則

1.函式程式碼塊以 def 關鍵詞開頭,後接函式識別符號名稱和圓括號()。
2.任何傳入引數和自變數必須放在圓括號中間。圓括號之間可以用於定義引數。
3.函式的第一行語句可以選擇性地使用文件字串—用於存放函式說明。
4.函式內容以冒號起始,並且縮排。
5.return [表示式] 結束函式,選擇性地返回一個值給呼叫方。不帶表示式的return相當於返回 None。

python具體程式碼結構

            def 函式名(引數1,引數2):
                '''函式的註釋'''
                函式體程式碼
                return 返回值
1.def	
	是定義函式的關鍵字
2.函式名
	函式名類似於是變數名 指代函式體程式碼 命名與變數名一致
3.括號
	定義函式的時候 函式名後面肯定要先寫括號
4.引數
	類似於使用函式的時候 給函式內部傳遞的資料 可以不寫 或者單個、多個
5.冒號
	定義函式也需要有縮排的程式碼塊
6.函式的註釋
	用於解釋函式的主要功能、使用方法等說明性文字
7.函式體程式碼
	函式的核心功能 也是我們將來編寫的核心
8.return
	後面跟什麼 那麼執行完函式之後就會返回什麼