日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python之文本操作

發布時間:2024/1/18 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python之文本操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python之文本操作

文本文件

文本文件是一種典型的順序文件,其文件的邏輯結構又屬于流式文件。文本文件是指以 ASCII 碼方式(也稱文本方式)存儲的文件,更確切地說,英文、數字等字符存儲的是 ASCII 碼,而漢字存儲的是機內碼。

文本文件中除了存儲文件有效字符信息(包括能用 ASCII 碼字符表示的回車、換行等信息)外,不能存儲其他任何信息,比如圖片、視頻等等。我們常見的 txt 文件就是文本文件。

Python 的 open 方法用于打開一個文件,并返回文件對象,在對文件進行處理過程都需要使用到這個函數,如果該文件無法被打開,會拋出異常。

open 方法的語法格式為:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closed=True, opener=None)
  • file:表示要打開的文件路徑(相對或者絕對路徑);
  • mode:表示文件打開模式;
  • buffering:用于設置緩沖;
  • encoding:用于設置編碼格式,一般使用 utf8;
  • errors:指明編碼和解碼錯誤時怎么樣處理,適用于文本模式;
  • newline:文本模式之下,控制一行的結束字符;
  • closed:傳入的 file 參數類型;
  • opener:自定義打開文件方式。
文件打開模式

mode 參數的打開模式具體如下表所示:

模式描述
r以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。
rb以二進制格式打開一個文件用于只讀。文件指針將會放在文件的開頭。這是默認模式。
r+打開一個文件用于讀寫。文件指針將會放在文件的開頭。
rb+以二進制格式打開一個文件用于讀寫。文件指針將會放在文件的開頭。
w打開一個文件只用于寫入。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
wb以二進制格式打開一個文件只用于寫入。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
w+打開一個文件用于讀寫。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
wb+以二進制格式打開一個文件用于讀寫。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
a打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。
ab以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。
a+打開一個文件用于讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用于讀寫。
ab+以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用于讀寫。

假設現在有一個 test.txt 文件,位于 step1 目錄下,我們可以使用下列代碼來打開文件:

f = open("step1/test.txt","r",encoding="utf8") # f就是文件對象,一般情況下,只設置這3個參數
關閉文件 close 函數

close() 方法用于關閉一個已打開的文件。關閉后的文件不能再進行讀寫操作, 否則會觸發 ValueError 錯誤。 close() 方法允許調用多次。

當 file 對象被引用到操作另外一個文件時,Python 會自動關閉之前的 file 對象。 使用 close() 方法關閉文件是一個好的習慣。

f = open("step1/test.txt","r",encoding="utf8")# 進行相關的讀寫操作之后使用 close 函數關閉文件f.close()
文件對象常用屬性

文件對象常用的屬性主要有 3 個:

  • closed:如果文件已被關閉返回 True,否則返回 False;

    f = open("step/test.txt","r",encoding="utf8")print(f.closed)f.close()print(f.closed)

    執行結果:

    FalseTrue
  • mode:返回被打開文件的訪問模式;

    f = open("step/test.txt","r",encoding="utf8")print(f.mode)

    執行結果:

    r
  • name:返回文件的名稱;

    f = open("step/test.txt","r",encoding="utf8")print(f.name)

    執行結果:

    step/test.txt

Python文件之文本文件的隨機讀寫

隨機讀寫

使用 read 等順序讀寫函數時,每次都是從每行的第一個字符開始讀取,但是,我們不一定每次的需求都是從頭開始讀取。假設我們有test.txt文件,內容如下:

hello world

下面我們將介紹隨機讀取的函數:

  • seek(offset,whence=0):用于移動文件讀取指針到指定位置。offset 表示開始的偏移量,也就是代表需要移動偏移的字節數;whence 表示要從哪個位置開始偏移;0 代表從文件開頭開始算起,1 代表從當前位置開始算起,2 代表從文件末尾算起。

    f = open("test.txt","rb") f.seek(2) # 將讀取指針移動到2的位置 print(f.read())# 移動到文件倒數第5個字節,如果要設置whence參數,文件的打開格式必須為二進制模式 f.seek(-5,2) print(f.read()) f.close()

    執行結果:

    b'llo world'b'world'
  • seekable():如果文件是可搜索的,則 seekable 方法返回 True,否則返回 False。如果文件允許訪問文件流(例如 seek 方法),則該文件是可搜索的。

  • tell():返回文件的當前位置,即文件指針當前位置。

    f = open("test.txt","r") f.seek(2) print(f.tell()) f.read(1) # 讀取一個字節的內容print(f.tell()) # 讀取內容也會改變指針的位置f.close()

    執行結果:

    23
  • truncate([size]):方法用于截斷文件并返回截斷的字節長度。指定 size 的話,就從文件的開頭開始截斷指定長度,其余內容刪除;不指定 size 就從文件開頭開始截斷到當前位置,其余內容刪除。

    f = open("test.txt","r+")print(f.truncate(3))print(f.read())f.close()

    執行結果:

    3hel

下面是一個對讀寫文本文件3種方式的總結:

使用Python讀/寫文本文件

? 使用Python來讀/寫文本需要用到“open”這個關鍵字。它的作用是打開一個文件,并創建一個文件對象。
? 使用Python打開文件,有兩種寫法。

第1種方式如下:
f = open('文件路徑', '文件操作方式', encoding='utf-8') 對文件進行操作 f.close()
第2種方式,使用Python的上下文管理器:

with open(‘文件路徑’, ‘文件操作方式’, encoding=‘utf-8’) as f:
對文件進行操作
第1種方式需要手動關閉文件,但是在程序開發中經常會出現忘記關閉文件的情況。第2種方法不需要手動關閉文件,只要代碼退出了縮進,Python就會自動關閉文件

使用Python讀文本文件

? 使用Python打開一個文本文件時,首先要保證這個文件是存在的。在讀文件的時候,“文件操作方式”這個參數可以省略,也可以寫成“r”,也就是read的首字母。
? 文件路徑可以是絕對路徑,也可以是相對路徑。如果是絕對路徑,Linux和Mac OS不能直接使用“~”表示“home目錄”,因為Python不認識“~”這個符號。如果非要使用這個符號,需要使用Python的“os”模塊,代碼如下:

import os real_path = os.path.expanduser('~/project/xxx')

使用下面的代碼來打開text.txt文件:

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

通過f來讀文件
這里有一個參數“encoding”。這個參數特別有用,它可以在打開文件的時候將文件轉換為UTF-8編碼格式,從而避免亂碼的出現。這個參數只有Python 3有,在Python 2中使用這個參數會報錯。如果文件是在Windows中創建的,并且使用UTF-8打開文件出現了亂碼,可以把編碼格式改為GBK

使用Python寫文本文件
使用Python寫文件也需要先打開文件,使用如下代碼來打開文件:

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

通過f來寫文件
這里多出來一個參數“w”,w是英文write的首字母,意思是以寫的方式打開文件。這個參數除了為“w”外,還可以為“a”。它們的區別在于,如果原來已經有一個new.txt文件了,使用“w”會覆蓋原來的文件,導致原來的內容丟失;而使用“a”,則會把新的內容寫到原來的文件末尾

二進制文件的讀寫

我們學習了打開二進制文件的方式,比如rb、wb等。假設我們現在有一個圖片文件test.png。

with open("test.png","rb") as f: print(f.read()) print(f.read(10)) # 只讀取10個字節

執行結果(不同的圖片結果不一致):

b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\x02\x00\x00\x01X\x08\x06\x00\x00\x00\xb8Z\xf2\xc1\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\....'b'\x89PNG\r\n\x1a\n\x00\x00'

當我們寫入二進制文件時,我們只能寫入 bytes 類型的數據。

with open("test.png","rb") as f,open("result.png","wb") as fb: data = f.read(10) fb.write(data)

代碼運行后,在當前文件夾中就會創建一個result.png文件,該文件的內容為test.png的前 10 個字節。

CSV模塊讀寫文件

csv 模塊

CSV (Comma Separated Values) 是逗號分隔符文本格式,常用于 Excel 和數據庫的導入和導出,Python 標準庫的 CSV 模塊提供了讀取和寫入 CSV 格式文件的對象。CSV 以純文本存儲數和文本。文件的每一行就代表一條數據,每條記錄包含由逗號分隔一個或多個屬性值。

以文本的形式打開 csv 文件如圖 1 所示:

圖 1

以 Excel 的形式打開 csv 文件如圖 2 所示:

圖 2

讀取 csv 文件

假設我們有一個 test.csv 文件,內容如圖 2 所示。

  • 以返回列表的形式讀取 csv 文件。

    import csv # 導入 csv 模塊 with open("test.csv","r") as f: result = csv.reader(f) # 返回的是一個迭代器 next(result) # 使用next可以跳過第一行的讀取 print(list(result))

    執行結果:

    [['5.1', '3.5', '1.4', '0.2'], ['4.9', '3', '1.4', '0.2'], ['4.7', '3.2', '1.3', '0.2'], ['4.6', '3.1', '1.5', '0.2'], ['5', '3.6', '1.4', '0.2'], ['5.4', '3.9', '1.7', '0.4'], ['4.6', '3.4', '1.4', '0.3'], ['5', '3.4', '1.5', '0.2'], ['4.4', '2.9', '1.4', '0.2'], ['4.9', '3.1', '1.5', '0.1'], ['5.4', '3.7', '1.5', '0.2'], ['4.8', '3.4', '1.6', '0.2'], ['4.8', '3', '1.4', '0.1'], ['4.3', '3', '1.1', '0.1'], ['5.8', '4', '1.2', '0.2'], ['5.7', '4.4', '1.5', '0.4'], ['5.4', '3.9', '1.3', '0.4'], ['5.1', '3.5', '1.4', '0.3'], ['5.7', '3.8', '1.7', '0.3'], ['5.1', '3.8', '1.5', '0.3'], ['5.4', '3.4', '1.7', '0.2'], ['5.1', '3.7', '1.5', '0.4'], ['4.6', '3.6', '1', '0.2'], ['5.1', '3.3', '1.7', '0.5']]
  • 以字典的形式讀取 csv 文件。

    import csv # 導入 csv 模塊 with open("test.csv","r+") as f: # 使用DictReader創建的reader是一個字典對象,遍歷后,不包含第一行數據 result = csv.DictReader(f) for x in result: print(x)

    執行結果:

    OrderedDict([('sepal length (cm)', '5.1'), ('sepal width (cm)', '3.5'), ('petal length (cm)', '1.4'), ('petal width (cm)', '0.2')])OrderedDict([('sepal length (cm)', '4.9'), ('sepal width (cm)', '3'), ('petal length (cm)', '1.4'), ('petal width (cm)', '0.2')])OrderedDict([('sepal length (cm)', '4.7'), ('sepal width (cm)', '3.2'), ('petal length (cm)', '1.3'), ('petal width (cm)', '0.2')])OrderedDict([('sepal length (cm)', '4.6'), ('sepal width (cm)', '3.1'), ('petal length (cm)', '1.5'), ('petal width (cm)', '0.2')])OrderedDict([('sepal length (cm)', '5'), ('sepal width (cm)', '3.6'), ('petal length (cm)', '1.4'), ('petal width (cm)', '0.2')])OrderedDict([('sepal length (cm)', '5.4'), ('sepal width (cm)', '3.9'), ('petal length (cm)', '1.7'), ('petal width (cm)', '0.4')])OrderedDict([('sepal length (cm)', '4.6'), ('sepal width (cm)', '3.4'), ('petal length (cm)', '1.4'), ('petal width (cm)', '0.3')])OrderedDict([('sepal length (cm)', '5'), ('sepal width (cm)', '3.4'), ('petal length (cm)', '1.5'), ('petal width (cm)', '0.2')])OrderedDict([('sepal length (cm)', '4.4'), ('sepal width (cm)', '2.9'), ('petal length (cm)', '1.4'), ('petal width (cm)', '0.2')])OrderedDict([('sepal length (cm)', '4.9'), ('sepal width (cm)', '3.1'), ('petal length (cm)', '1.5'), ('petal width (cm)', '0.1')])OrderedDict([('sepal length (cm)', '5.4'), ('sepal width (cm)', '3.7'), ('petal length (cm)', '1.5'), ('petal width (cm)', '0.2')])OrderedDict([('sepal length (cm)', '4.8'), ('sepal width (cm)', '3.4'), ('petal length (cm)', '1.6'), ('petal width (cm)', '0.2')])OrderedDict([('sepal length (cm)', '4.8'), ('sepal width (cm)', '3'), ('petal length (cm)', '1.4'), ('petal width (cm)', '0.1')])OrderedDict([('sepal length (cm)', '4.3'), ('sepal width (cm)', '3'), ('petal length (cm)', '1.1'), ('petal width (cm)', '0.1')])OrderedDict([('sepal length (cm)', '5.8'), ('sepal width (cm)', '4'), ('petal length (cm)', '1.2'), ('petal width (cm)', '0.2')])OrderedDict([('sepal length (cm)', '5.7'), ('sepal width (cm)', '4.4'), ('petal length (cm)', '1.5'), ('petal width (cm)', '0.4')])OrderedDict([('sepal length (cm)', '5.4'), ('sepal width (cm)', '3.9'), ('petal length (cm)', '1.3'), ('petal width (cm)', '0.4')])OrderedDict([('sepal length (cm)', '5.1'), ('sepal width (cm)', '3.5'), ('petal length (cm)', '1.4'), ('petal width (cm)', '0.3')])OrderedDict([('sepal length (cm)', '5.7'), ('sepal width (cm)', '3.8'), ('petal length (cm)', '1.7'), ('petal width (cm)', '0.3')])OrderedDict([('sepal length (cm)', '5.1'), ('sepal width (cm)', '3.8'), ('petal length (cm)', '1.5'), ('petal width (cm)', '0.3')])OrderedDict([('sepal length (cm)', '5.4'), ('sepal width (cm)', '3.4'), ('petal length (cm)', '1.7'), ('petal width (cm)', '0.2')])OrderedDict([('sepal length (cm)', '5.1'), ('sepal width (cm)', '3.7'), ('petal length (cm)', '1.5'), ('petal width (cm)', '0.4')])OrderedDict([('sepal length (cm)', '4.6'), ('sepal width (cm)', '3.6'), ('petal length (cm)', '1'), ('petal width (cm)', '0.2')])OrderedDict([('sepal length (cm)', '5.1'), ('sepal width (cm)', '3.3'), ('petal length (cm)', '1.7'), ('petal width (cm)', '0.5')])
寫入 csv 文件
  • 以元組的方式寫入。

    import csvheaders = ["name","age","height"]values = [("小王",18,178),("小張",20,180),("小李",17,166)]with open("test.csv","w",encoding="utf-8",newline="") as f: writer = csv.writer(f) writer.writerow(headers) # 首先寫入第一行 writer.writerows(values) # 寫入values

    代碼運行后,test.csv 的內容變更為:

    name,age,height 小王,18,178 小張,20,180 小李,17,166
  • 以字典的形式寫入。

    import csv headers = ["name", "age", "height"] values = [{"name":"小王","age":18,"height":178},{"name":"小王","age":18,"height":178},{"name":"小王","age":18,"height":178}] with open("test.csv","w",encoding="utf-8",newline="") as f: writer = csv.DictWriter(f,headers) # 使用csv.DictWriter()方法,需傳入兩個參數,第一個為對象,第二個為文件的title writer.writeheader() # 使用此方法,寫入表頭 writer.writerows(values)

    代碼運行之后,test.csv 文件的內容為:

    name,age,height 小王,18,178 小張,20,180 小李,17,166

總結

以上是生活随笔為你收集整理的Python之文本操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。