Python之路day08-文件讀寫操做_函數初識

前言時刻:

今天挑戰一下,將day08和day09的搞定。今天主要學習了文件的操做讀寫、html

來來總結一波:python

學習了文件的讀:r、rb、r+、r+bbash

寫:w、wb、w+、w+b機器學習

文件句柄,seek光標,flush強制刷新文件內容,tell:告訴當前句柄所在的位置(int)函數

Day09:函數的定義學習

傳參:實參、形參編碼

一、文件操做

Python 中的文件操做很重要,雖然不難,可是坑很多,好比:文件的編碼方式。若是你搞懂 Python 的編碼方式了,這都不是問題,具體可看我以前寫的文章:Python文件編碼問題。還有就是應用場景不少,好比機器學習中數據的讀取和寫入、Web 爬蟲的數據存取等。操作系統

open(file, mode='w', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

參數說明:code

  • file: 必需,文件路徑(相對或者絕對路徑)。
  • mode: 可選,文件操做模式htm

    • 寫:w、wb、w+、wb+,讀:r、rb、r+、rb+
  • buffering: 設置緩衝
  • encoding: 若不設置則默認和操做系統的默認編碼方式同樣。好比:Mac OS上是 UTF-8,Windows上是 gbk,不過 win10 上改爲 UTF-8 了,Linux 上是 UTF-8。按照解碼和編碼方式同樣的原則,有UTF-八、GBK等。
  • errors: 報錯級別
  • newline: 區分換行符
  • closefd: 傳入的file參數類型
  • opener: 設置自定義開啓器,開啓器的返回值必須是一個打開的文件描述符。

1.一、寫入文件操做

寫入的 mode 有:w 以 Unicode 的方式寫入文件內容,wb 寫入二進制的文件內容,w+ 能夠讀取也能夠寫入,加號至關因而添加了一個功能,wb+ 可讀可寫二進制文件。

# 一、麻煩的一種方式,

file_name = "write_test.txt"
f = open('write_test.txt', mode='w', encoding="utf8")   # 定義操做文件的句柄f,

f.write("這是一個")   # 寫入內容
f.close()   # 關閉文件句柄

# 二、推薦方式  使用with,結束後自動關閉句柄
with open("write_test.txt", mode='w', encoding="utf8") as f, open("test2.txt", 'w', encoding="utf8") as f2:
    f.write("我是主流with讀取文件的方式。")
    f2.write("with 能夠並列操做幾個文件哈")

1.二、讀取文件操做

寫入的 mode 有:r 以 Unicode 的方式讀取文件內容,rb 讀取二進制的文件內容,r+ 能夠讀取也能夠寫入,加號至關因而添加了一個功能,rb+ 可讀可寫 二進制文件。

讀取文件的方式需重點掌握,

"""
write_test.txt 文件的內容:

我是主流with讀取文件的方式。
hi 第二行
"""

read 方法:

使用 f.read()方法讀取文件不是很推薦,由於他會一次性將文件全部數據讀取到內存中

# 一、read方法
with open("write_test.txt", mode='r', encoding="utf8") as f:
    content = f.read()
    print(content)
    
    # 1.二、讀取前n個字符
    print(f.tell())   # 53   tell 當前光標的位置
    f.seek(0)   # seek 將光標移動到0的位置 單位是字節byte
 
    print(f.read(4))  # 我是主流    read(n) 讀取前n個字符
  • f.tell() 返回當前文件句柄的光標的位置,單位是字節
  • f.seek(number) 將光標移到 number 的位置,單位是字節byte
  • f.read(number) 讀取當前光標後面的 number 個字符
  • 解釋下,字符和字符的區別,英文字母的話一個字符=一個字節,可是中文,一箇中文字符=3個字節。仍是數據編碼的問題,哈哈,若是搞懂了,這裏so easy。

readline和readlines 方法:

f.readline() 讀取當前光標所在行的光標以後的內容。

"""
write_test.txt 內容:

我愛
學習Python
"""
# 二、readline

with open("write_test.txt", mode='r', encoding="utf8") as f:
    f.seek(10) 
    content = f.readline()  
    print(content)    # 習Python

來來解釋一下,首先我使用 seek(7) 將光標移動到第七個字節上(「學習」佔用6個字節+緊接着是換行符佔用一個自字節+第二行的」學「佔3個字節),就到了第二行的」學「以後,而後使用 readline() 就讀到了」習Python「。

f.readlines() 返回文件中全部行內容的列表,以換行符做爲分隔。

# 三、readlines

with open("write_test.txt", mode='r', encoding="utf8") as f:
    content = f.readlines()  
    print(content, type(content))    
    # ['我是主流with讀取文件的方式。\n', 'hi 第二行'] <class 'list'>

小總結:readlines() 方法針對小文件而言,適合並且快;可是對於一個大的文件,一次性徹底讀取到內存中,就很費資源,不是很推薦。

可是我 Python 怎麼可能不解決此問題,請出咱們今天的讀取文件的主角方式 迭代讀取文件內容

迭代讀取文件:

推薦,

"""
write_test.txt 內容:

我愛
學習Python
"""

# 二、readline

with open("write_test.txt", encoding="utf8") as f:
    for each in f:
        print(each)

# 打印:
"""
我愛

學習Python

"""

總結:

文件操做很重要,可是少不了文件編碼的問題,因此要搞懂編碼問題。不然後面再有編碼的問題,在學習就有點浪費時間了。

參考文章:

https://www.zwjjiaozhu.top/20...

https://www.runoob.com/python...

相關文章
相關標籤/搜索