1. 程式人生 > 其它 >檔案基操及函式簡介

檔案基操及函式簡介

檔案基操及函式簡介

檔案內游標的移動

1.read在文字模式下是可以指定讀取的字元個數的

with open(r'1.txt','r',encoding='utf8') as f:
    print(f.read(5))  # 啊實打實的 括號裡的引數是多少,讀出的字元就是幾個

2.read在二進位制下指定的是位元組數

with open(r'1.txt','rb') as f:
    print(f.read(6).decode('utf8'))  # 啊實 括號裡的引數是多少,讀出的位元組就是多少

3.控制游標的移動:seek

seek關鍵字可以控制游標的移動,在文字模式下移動的單位也是位元組數,seek關鍵字有兩個引數,seek(offset,whence):

offset:控制移動的位元組數

whence:控制游標的模式

(1).“0”:讓游標移動到開頭(支援文字模式和二進位制模式)

with open(r'1.txt','r',encoding='utf8') as f:
    print(f.read())  # 啊實打實的
    f.seek(6,0)  # 控制游標移動到最前方,並移動六個位元組,然後在執行下面程式碼
    print(f.read())  # 打實的

(2).“1”:游標相對於當前位置(只支援二進位制模式)

with open(r'1.txt','rb') as f:
    print(f.read(6).decode('
utf8')) # 啊實 f.seek(6,1) # 控制游標在當前位置,並移動六個位元組,然後在執行下面程式碼 print(f.read().decode('utf8')) #

(3).“2”:游標移動到文字末尾(只支援二進位制模式)

with open(r'1.txt','rb') as f:
    print(f.read(6).decode('utf8'))  # 啊實
    f.seek(6,2)  # 控制游標移動到文字末尾,移到末尾之後就已經沒有文字,使用這個方法可以做到對文字的實時監控
    print(f.read().decode('utf8
'))

檔案修改

我們都知道硬碟可以永久的儲存資料,其實硬碟上的資料是有兩種狀態的,“佔有態和自由態”,我們刪除資料,其實就是把資料的位置改變成自由態,之後如果有新的資料加了進來,如果落在了自由態的位置,那麼將會直接覆蓋。

with open(r'1.txt','r+t',encoding='utf8') as f:
    f.seek(6)  # 不寫游標的控制模式,預設是0
    f.write('你好')  

修改完之後你會發現,“你好”把之前文字覆蓋過去了,這是因為檔案資料在硬碟上其實是刻死的,並不能從中間新增新的內容,只能把舊的內容清除,然後再覆蓋。那我們再怎麼修改檔案呢,有兩種方法:

1.將檔案內容一次性全部讀取到記憶體當中去,在記憶體中修改,然後再覆蓋原檔案,這樣的優點是隻有一個檔案,缺點是會過多的佔用記憶體空間。

# 寫一個1.txt檔案,裡面的內容是:你好我是帥哥
with open(r'1.txt','r',encoding='utf8') as f:
    l = f.read()
with open(r'1.txt','w',encoding='utf8') as  f1:
    f1.write(l.replace('帥哥','oscar'))
# 你好我是oscar

2.以讀的方式開啟原檔案,以寫的方式開啟一個臨時檔案,把原檔案的內容一行行寫入到臨時檔案中去,並做修改,然後把原檔案刪除,臨時檔案儲存為原檔名字,優點是不佔用記憶體空間,缺點是打開了兩個檔案。

import os  # 引用模組
with open(r'1.txt','r',encoding='utf8') as f,open(r'1.txt.swap','w',encoding='utf8') as f1:
    for i in f:
        f1.write(i.replace('oscar','大帥哥'))  # 把1.txt的文字一行行寫入臨時檔案並作出想要的修改
os.remove('1.txt')  # 刪除檔案
os.rename('1.txt.swap','1.txt')  # 重新命名檔案

函式簡介

函式就是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段。函式能提高應用的模組性,和程式碼的重複利用率。我們已經使用過Python提供的許多內建函式,比如print()、len()、inpurt()。我們也可以自己建立函式,這被叫做使用者自定義函式。函式跟迴圈的意思有點像,但是本質並不相同,函式:可以在不同的地方使用相同的程式碼,迴圈:在相同的位置使用相同的程式碼。

函式用通俗的話語講就是:已經提前準備好了,你想什麼時候用就什麼時候用。

那麼函式怎麼寫呢,來看。

 

函式的語法結構

1.函式的語法結構

def 函式名(引數):
    '''函式的註解'''
    函式體程式碼
    return 返回值

(1).def:定義函式的關鍵字

(2).函式名:類似於變數名,指代函式程式碼體,命名與變數命名規範一致

(3).括號:括號一定要帶,不能丟

(4).引數:類似於使用函式的時候,給函式內部傳遞的資料,可以不寫,也可以寫多個或一個。

(5).冒號:定義函式的時候也需要縮排

(6).函式的註解:解釋函式的作用

(7).函式體程式碼:函式的核心功能

(8).return:後面跟什麼,執行完函式就返回什麼

函式的呼叫

函式寫好了,我們怎麼使用呢?

之前我們使用python的內建函式的時候,比如“print”的時候,就是直接使用,沒錯,函式的定義是什麼,定義好了想什麼時候用就什麼時候用,用的時候喊一聲“我要用你了”,直接使用即可。我們來看一下:

def output():  # 定義函式
    print('呼叫output就能看到我')  # 函式程式碼體

output()  # 呼叫函式


output()  # 呼叫函式

 

 這裡是IT小白陸祿緋,歡迎各位大佬的指點!!!