當前位置:九游会j9娱乐平台-九游ag登录中心网址 » 編程語言 » withas用法python

withas用法python-九游会j9娱乐平台

發布時間: 2024-01-17 08:34:35

『壹』 python中with語句的作用

with語句相當於你定義一個類的時候定義了__enter__()和__exit__()這個兩個方法。
在我們進行文件操作的的時候會用到open方法,後面有了with open以後就不再只使用open方法了,為什麼?因為with open方法簡單,我們不用再去管關閉文件了,即使中間發生異常,with open也會幫我們把文件關閉掉,以下示例演示下with open方法;
class file(object):
"""文件操作類"""
def __init__(self, filepath, mode):
self.filepath = filepath
self.mode = mode

def __enter__(self):
"""打開文件"""
self.file = open(self.filepath, self.mode)
print("打開文件")
return self.file

def __exit__(self, exc_type, exc_val, exc_tb):
"""關閉文件"""
print("關閉文件")
self.file.close()

if __name__ == '__main__':
with file('log.log', 'r') as file:
file.write("家啊")

可以看出來有了__enter__()和__exit__(),我們自定義的類也可以使用with了

『貳』 python如何從文件讀取數據

1.1 讀取整個文件

要讀取文件,需要一個包含幾行文本的文件(文件pi_desc.txt與file_reader.py在同一目錄下)

pi_desc.txt

3.1415926535
8979323846
2643383279
5028841971

file_reader.py

with open("pi_desc.txt") as file_object:
contents = file_object.read()
print(contents)

我們可以看出,讀取文件時,並沒有使用colse()方法,那麼未妥善的關閉文件,會不會導致文件收到損壞呢?在這里是不會的,因為我們在open()方法前邊引入了關鍵字with,該關鍵字的作用是:在不需要訪問文件後將其關閉

1.2文件路徑

程序在讀取文本文件的時候,如果不給定路徑,那麼它會先在當前目錄下進行檢索,有時候我們需要讀取其他文件夾中的路徑,例如:

『叄』 python with as為什麼無法捕獲異常

with在打開文件的這個操作中的作用是保證每次正常打開文件後,不論遇到什麼,最後都會執行文件的關閉操作,避免腳本中遺漏。但是他自身並沒有抓取異常的處理機制。

with open("asdasdas") as a:

print("打開成功")

do_something()

這段代碼的含義,相當於打開了文件「asdasdas」後列印了「打開成功」的字樣後,又處理了do_something()這段邏輯。不論do_something()這段邏輯正常執行結束,還是拋出異常,都會保證最終「asdasdas」這個文件都會被關閉。避免因為文件未被關閉而導致的種種問題。


你的代碼可以改為以下部分,這樣就可以catch到讀取文件中的異常了。

try:

with open("asdasdas") as a:

print("打開成功")

except:

print("打開失敗")

『肆』 萬字干貨,python語法大合集,一篇文章帶你入門

這份資料非常純粹,只有python的基礎語法,專門針對想要學習python的小白。

python中用#表示單行注釋,#之後的同行的內容都會被注釋掉。

使用三個連續的雙引號表示多行注釋,兩個多行注釋標識之間內容會被視作是注釋。

python當中的數字定義和其他語言一樣:

我們分別使用 , -, *, /表示加減乘除四則運算符。

這里要注意的是,在python2當中,10/3這個操作會得到3,而不是3.33333。因為除數和被除數都是整數,所以python會自動執行整數的計算,幫我們把得到的商取整。如果是10.0 / 3,就會得到3.33333。目前python2已經不再維護了,可以不用關心其中的細節。

但問題是python是一個 弱類型 的語言,如果我們在一個函數當中得到兩個變數,是無法直接判斷它們的類型的。這就導致了同樣的計算符可能會得到不同的結果,這非常蛋疼。以至於程序員在運算除法的時候,往往都需要手工加上類型轉化符,將被除數轉成浮點數。

在python3當中撥亂反正,修正了這個問題,即使是兩個整數相除,並且可以整除的情況下,得到的結果也一定是浮點數。

如果我們想要得到整數,我們可以這么操作:

兩個除號表示 取整除 ,python會為我們保留去除余數的結果。

除了取整除操作之外還有取余數操作,數學上稱為取模,python中用%表示。

python中支持 乘方運算 ,我們可以不用調用額外的函數,而使用**符號來完成:

當運算比較復雜的時候,我們可以用括弧來強制改變運算順序。

python中用首字母大寫的true和false表示真和假。

用and表示與操作,or表示或操作,not表示非操作。而不是c 或者是java當中的&&, || 和!。

在python底層, true和false其實是1和0 ,所以如果我們執行以下操作,是不會報錯的,但是在邏輯上毫無意義。

我們用==判斷相等的操作,可以看出來true==1, false == 0.

我們要小心python當中的bool()這個函數,它並不是轉成bool類型的意思。如果我們執行這個函數,那麼 只有0會被視作是false,其他所有數值都是true

python中用==判斷相等,>表示大於,>=表示大於等於, <表示小於,<=表示小於等於,!=表示不等。

我們可以用and和or拼裝各個邏輯運算:

注意not,and,or之間的優先順序,其中not > and > or。如果分不清楚的話,可以用括弧強行改變運行順序。

關於list的判斷,我們常用的判斷有兩種,一種是剛才介紹的==,還有一種是is。我們有時候也會簡單實用is來判斷,那麼這兩者有什麼區別呢?我們來看下面的例子:

python是全引用的語言,其中的對象都使用引用來表示。is判斷的就是 兩個引用是否指向同一個對象 ,而==則是判斷兩個引用指向的具體內容是否相等。舉個例子,如果我們把引用比喻成地址的話,is就是判斷兩個變數的是否指向同一個地址,比如說都是沿河東路xx號。而==則是判斷這兩個地址的收件人是否都叫張三。

顯然,住在同一個地址的人一定都叫張三,但是住在不同地址的兩個人也可以都叫張三,也可以叫不同的名字。所以如果a is b,那麼a == b一定成立,反之則不然。

python當中對字元串的限制比較松, 雙引號和單引號都可以表示字元串 ,看個人喜好使用單引號或者是雙引號。我個人比較喜歡單引號,因為寫起來方便。

字元串也支持 操作,表示兩個字元串相連。除此之外,我們把兩個字元串寫在一起,即使沒有 ,python也會為我們拼接:

我們可以使用[]來查找字元串當中某個位置的字元,用 len 來計算字元串的長度。

我們可以在字元串前面 加上f表示格式操作 ,並且在格式操作當中也支持運算,比如可以嵌套上len函數等。不過要注意,只有python3.6以上的版本支持f操作。

最後是none的判斷,在python當中none也是一個對象, 所有為none的變數都會指向這個對象 。根據我們前面所說的,既然所有的none都指向同一個地址,我們需要判斷一個變數是否是none的時候,可以使用is來進行判斷,當然用==也是可以的,不過我們通常使用is。

理解了none之後,我們再回到之前介紹過的bool()函數,它的用途其實就是判斷值是否是空。所有類型的 默認空值會被返回false ,否則都是true。比如0,"",[], {}, ()等。

除了上面這些值以外的所有值傳入都會得到true。

python當中的標准輸入輸出是 input和print

print會輸出一個字元串,如果傳入的不是字元串會自動調用__str__方法轉成字元串進行輸出。 默認輸出會自動換行 ,如果想要以不同的字元結尾代替換行,可以傳入end參數:

使用input時,python會在命令行接收一行字元串作為輸入。可以在input當中傳入字元串,會被當成提示輸出:

python支持 三元表達式 ,但是語法和c 不同,使用if else結構,寫成:

上段代碼等價於:

python中用[]表示空的list,我們也可以直接在其中填充元素進行初始化:

使用append和pop可以在list的末尾插入或者刪除元素:

list可以通過[]加上下標訪問指定位置的元素,如果是負數,則表示 倒序訪問 。-1表示最後一個元素,-2表示倒數第二個,以此類推。如果訪問的元素超過數組長度,則會出發 indexerror 的錯誤。

list支持切片操作,所謂的切片則是從原list當中 拷貝 出指定的一段。我們用start: end的格式來獲取切片,注意,這是一個 左閉右開區間 。如果留空表示全部獲取,我們也可以額外再加入一個參數表示步長,比如[1:5:2]表示從1號位置開始,步長為2獲取元素。得到的結果為[1, 3]。如果步長設置成-1則代表反向遍歷。

如果我們要指定一段區間倒序,則前面的start和end也需要反過來,例如我想要獲取[3: 6]區間的倒序,應該寫成[6:3:-1]。

只寫一個:,表示全部拷貝,如果用is判斷拷貝前後的list會得到false。可以使用del刪除指定位置的元素,或者可以使用remove方法。

insert方法可以 指定位置插入元素 ,index方法可以查詢某個元素第一次出現的下標。

list可以進行加法運算,兩個list相加表示list當中的元素合並。 等價於使用extend 方法:

我們想要判斷元素是否在list中出現,可以使用 in關鍵字 ,通過使用len計算list的長度:

tuple和list非常接近,tuple通過()初始化。和list不同, tuple是不可變對象 。也就是說tuple一旦生成不可以改變。如果我們修改tuple,會引發typeerror異常。

由於小括弧是有改變優先順序的含義,所以我們定義單個元素的tuple, 末尾必須加上逗號 ,否則會被當成是單個元素:

tuple支持list當中絕大部分操作:

我們可以用多個變數來解壓一個tuple:

解釋一下這行代碼:

我們在b的前面加上了星號, 表示這是一個list 。所以python會在將其他變數對應上值的情況下,將剩下的元素都賦值給b。

補充一點,tuple本身雖然是不可變的,但是 tuple當中的可變元素是可以改變的 。比如我們有這樣一個tuple:

我們雖然不能往a當中添加或者刪除元素,但是a當中含有一個list,我們可以改變這個list類型的元素,這並不會觸發tuple的異常:

dict也是python當中經常使用的容器,它等價於c 當中的map,即 存儲key和value的鍵值對 。我們用{}表示一個dict,用:分隔key和value。

。我們用{}表示一個dict,用:分隔key和value。

dict的key必須為不可變對象,所以 list、set和dict不可以作為另一個dict的key ,否則會拋出異常:

我們同樣用[]查找dict當中的元素,我們傳入key,獲得value,等價於get方法。

我們可以call dict當中的keys和values方法,獲取dict當中的所有key和value的集合,會得到一個list。在python3.7以下版本當中,返回的結果的順序可能和插入順序不同,在python3.7及以上版本中,python會保證返回的順序和插入順序一致:

我們也可以用in判斷一個key是否在dict當中,注意只能判斷key。

如果使用[]查找不存在的key,會引發keyerror的異常。如果使用 get方法則不會引起異常,只會得到一個none

setdefault方法可以 為不存在的key 插入一個value,如果key已經存在,則不會覆蓋它:

我們可以使用update方法用另外一個dict來更新當前dict,比如a.update(b)。對於a和b交集的key會被b覆蓋,a當中不存在的key會被插入進來:

我們一樣可以使用del刪除dict當中的元素,同樣只能傳入key。

python3.5以上的版本支持使用**來解壓一個dict:

set是用來存儲 不重復元素 的容器,當中的元素都是不同的,相同的元素會被刪除。我們可以通過set(),或者通過{}來進行初始化。注意當我們使用{}的時候,必須要傳入數據,否則python會將它和dict弄混。

set當中的元素也必須是不可變對象,因此list不能傳入set。

可以調用add方法為set插入元素:

set還可以被認為是集合,所以它還支持一些集合交叉並補的操作。

set還支持 超集和子集的判斷 ,我們可以用大於等於和小於等於號判斷一個set是不是另一個的超集或子集:

和dict一樣,我們可以使用in判斷元素在不在set當中。用可以拷貝一個set。

python當中的判斷語句非常簡單,並且python不支持switch,所以即使是多個條件,我們也只能 羅列if-else

我們可以用in來循環迭代一個list當中的內容,這也是python當中基本的循環方式。

如果我們要循環一個范圍,可以使用range。range加上一個參數表示從0開始的序列,比如range(10),表示[0, 10)區間內的所有整數:

如果我們傳入兩個參數,則 代表迭代區間的首尾

如果我們傳入第三個元素,表示每次 循環變數自增的步長

如果使用enumerate函數,可以 同時迭代一個list的下標和元素

while循環和c 類似,當條件為true時執行,為false時退出。並且判斷條件不需要加上括弧:

python當中使用 try和except捕獲異常 ,我們可以在except後面限制異常的類型。如果有多個類型可以寫多個except,還可以使用else語句表示其他所有的類型。finally語句內的語法 無論是否會觸發異常都必定執行

在python當中我們經常會使用資源,最常見的就是open打開一個文件。我們 打開了文件句柄就一定要關閉 ,但是如果我們手動來編碼,經常會忘記執行close操作。並且如果文件異常,還會觸發異常。這個時候我們可以使用with語句來代替這部分處理,使用with會 自動在with塊執行結束或者是觸發異常時關閉打開的資源

以下是with的幾種用法和功能:

凡是可以使用in語句來迭代的對象都叫做 可迭代對象 ,它和迭代器不是一個含義。這里只有可迭代對象的介紹,想要了解迭代器的具體內容,請移步傳送門:

python——五分鍾帶你弄懂迭代器與生成器,夯實代碼能力

當我們調用dict當中的keys方法的時候,返回的結果就是一個可迭代對象。

我們 不能使用下標來訪問 可迭代對象,但我們可以用iter將它轉化成迭代器,使用next關鍵字來獲取下一個元素。也可以將它轉化成list類型,變成一個list。

使用def關鍵字來定義函數,我們在傳參的時候如果指定函數內的參數名, 可以不按照函數定義的順序 傳參:

可以在參數名之前加上*表示任意長度的參數,參數會被轉化成list:

也可以指定任意長度的關鍵字參數,在參數前加上**表示接受一個dict:

當然我們也可以兩個都用上,這樣可以接受任何參數:

傳入參數的時候我們也可以使用*和**來解壓list或者是dict:

python中的參數 可以返回多個值

函數內部定義的變數即使和全局變數重名,也 不會覆蓋全局變數的值 。想要在函數內部使用全局變數,需要加上 global 關鍵字,表示這是一個全局變數:

python支持 函數式編程 ,我們可以在一個函數內部返回一個函數:

python中可以使用lambda表示 匿名函數 ,使用:作為分隔,:前面表示匿名函數的參數,:後面的是函數的返回值:

我們還可以將函數作為參數使用map和filter,實現元素的批量處理和過濾。關於python中map、rece和filter的使用,具體可以查看之前的文章:

五分鍾帶你了解map、rece和filter

我們還可以結合循環和判斷語來給list或者是dict進行初始化:

使用 import語句引入一個python模塊 ,我們可以用.來訪問模塊中的函數或者是類。

我們也可以使用from import的語句,單獨引入模塊內的函數或者是類,而不再需要寫出完整路徑。使用from import *可以引入模塊內所有內容(不推薦這么干)

可以使用as給模塊內的方法或者類起別名:

我們可以使用dir查看我們用的模塊的路徑:

這么做的原因是如果我們當前的路徑下也有一個叫做math的python文件,那麼 會覆蓋系統自帶的math的模塊 。這是尤其需要注意的,不小心會導致很多奇怪的bug。

我們來看一個完整的類,相關的介紹都在注釋當中

以上內容的詳細介紹之前也有過相關文章,可以查看:

python—— slots ,property和對象命名規范

下面我們來看看python當中類的使用:


這里解釋一下,實例和對象可以理解成一個概念,實例的英文是instance,對象的英文是object。都是指類經過實例化之後得到的對象。


繼承可以讓子類 繼承父類的變數以及方法 ,並且我們還可以在子類當中指定一些屬於自己的特性,並且還可以重寫父類的一些方法。一般我們會將不同的類放在不同的文件當中,使用import引入,一樣可以實現繼承。

我們創建一個蝙蝠類:

我們再創建一個蝙蝠俠的類,同時繼承superhero和bat:

執行這個類:

我們可以通過yield關鍵字創建一個生成器,每次我們調用的時候執行到yield關鍵字處則停止。下次再次調用則還是從yield處開始往下執行:

除了yield之外,我們還可以使用()小括弧來生成一個生成器:

關於生成器和迭代器更多的內容,可以查看下面這篇文章:

五分鍾帶你弄懂迭代器與生成器,夯實代碼能力

我們引入functools當中的wraps之後,可以創建一個裝飾器。裝飾器可以在不修改函數內部代碼的前提下,在外麵包裝一層其他的邏輯:

裝飾器之前也有專門的文章詳細介紹,可以移步下面的傳送門:

一文搞定python裝飾器,看完面試不再慌

不知道有多少小夥伴可以看到結束,原作者的確非常厲害,把python的基本操作基本上都囊括在裡面了。如果都能讀懂並且理解的話,那麼python這門語言就算是入門了。


如果你之前就有其他語言的語言基礎,我想本文讀完應該不用30分鍾。當然在30分鍾內學會一門語言是不可能的,也不是我所提倡的。但至少通過本文我們可以做到熟悉python的語法,知道大概有哪些操作,剩下的就要我們親自去寫代碼的時候去體會和運用了。

根據我的經驗,在學習一門新語言的前期,不停地查閱資料是免不了的。希望本文可以作為你在使用python時候的查閱文檔。

最後,我這里有各種免費的編程類資料,有需要的及時私聊我,回復"學習",分享給大家,正在發放中............





『伍』 python with函數怎麼用

with在python中並不是函數,是一個關鍵詞語句,比如if就是關鍵詞語句。

with大多用來打開一個文檔。
比如:
with open('test.txt') as f:
f.read()

這樣就可以讀取名為test的文檔里的內容,並且使用with語句不需要我們手動再調用文件的close()方法來關閉文件,如果test.txt文檔對象不再被使用,with會自動關閉文檔。比較智能一點。

『陸』 python其實很簡單 第十五章 文件操作

在各種變數中保存的數據都是臨時的,隨著程序運行結束都會丟失。要做到數據長期有效,必須建立在磁碟中建立文件,將數據輸入到文件中並保存。需要獲取數據時需要打開文件讀取。

而我們自己建立的程序都是應用程序,從本質上講,應用程序是無法直接操作計算機的硬體的,譬如讀寫磁碟中文件,這就需要調用操作系統中的相應命令。接下來我們使用的python內置函數open()、write()都是通過調用操作系統的相關命令才實現文件讀寫的,至於其中的細節,我們就不需要考慮了。

15.1創建和打開文件

在python 中創建或打開文件,實際上是建立一個對象,該對象通過調用內置的open()函數創建或打開一個文件。

語法:

file object = open(filename [, mode][, buffering])

參數說明如下:

filename:file_name變數是一個包含了你要訪問的文件名稱的字元串值;

mode:mode決定了打開文件的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個參數是非強制的,默認文件訪問模式為只讀(r)。

buffering:如果buffering的值被設為0,就不會有寄存;如果buffering的值取1,訪問文件時會寄存行;如果將buffering的值設為大於1的整數,表明了這就是的寄存區的緩沖大小;如果取負值,寄存區的緩沖大小則為系統默認。

mode參數的參數值及說明

對於其中最難區別的r、r 、w、w 、a、a 幾個參數的區別總結如下,要特別注意指針的位置:

下面舉例說明open( )函數的使用方法。

例1:

>>> file=open(ƈ.py')

如果文件「1.py」存在,則可以打開此文件;如果文件「1.py」不存在,則會出現如下提示:

traceback (most recent call last):

file " ", line 1, in

file=open(ƈ.py')

filenotfounderror: [errno 2] no such file or directory: ƈ.py'

例2:

>>> file=open(ɗ.py',』a 』)

雖然文件「4.py」不存在,但運行並未出現錯誤,參見上表,「a 」的含義是以讀寫模式打開文件,如果該文件已經存在,新內容將以追加方式寫入;如果該文件不存在,則新建文件用於寫入。查看文件夾,發現已經生成了一個新的文件4.py。

例3:

file=open('python.png','rb')

print(file)

運行結果:

這就是說,雖然python可以打開一個圖片格式的文件,但print()並不能將其輸出,還需要第三方庫中模塊的相應方法去處理,如pil中的open()f方法。

例4:

file = open("f.txt", "w",encoding='utf-8')

# 以只寫模式打開文件f.txt,編碼方式為utf-8

print( "文件名: ", file.name) # 輸出文件名

print( "是否已關閉 : ", file.closed) # 文件是否打開

print( "訪問模式 : ", file.mode) # 文件訪問模式

運行結果:

文件名: f.txt

是否已關閉 : false

訪問模式 : w

例5:


15.2關閉文件

打開文件使用後要及時關閉,以免造成不必要的破壞,同時也可以釋放內存。在python中使用close()方法可以關閉文件。

語法格式:

file.close()

其中,file為文件對象。


15.3 with語句

with 語句適用於對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的「清理」操作,釋放資源,比如文件使用後自動關閉、線程中鎖的自動獲取和釋放等。

with語句的語法格式如下:

with expression as target:

with-body

其中,expression用於指定一個表達式,譬如打開文件的open()函數。target用於指定一個變數,並且將expression的結果保存到該變數中,譬如文件對象file。with-body用於指定with語句體,譬如一些文件操作的相關語句,如果沒有要執行的語句體,則直接用pass語句代替。

假設python當前目錄下存在一個test.txt文件,其內容如下:

python是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於php和perl語言。

python是互動式語言: 這意味著,您可以在一個 python 提示符 >>> 後直接執行代碼。

python是面向對象語言: 這意味著python支持面向對象的風格或代碼封裝在對象的編程技術。

python是初學者的語言:python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發。

舉例如下:

with open('test.txt','r',encoding='utf-8') as file:

line=file.readline() # readline()方法可以讀取文件一行數據,接下來就會講到。

print(line)

運行結果如下:

python是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於php和perl語言。

而此時,我們給該段代碼with語句之外再增加一個讀取文件的語句,代碼如下:

with open('test.txt','r',encoding='utf-8') as file:

line=file.readline()

print(line)


line2=file.readline()

print(line2)

發現出現了如下錯誤提示:

traceback (most recent call last):

file "c:/users/zym/appdata/local/programs/python/python39/3.py", line 5, in

line2=file.readline()

valueerror: i/o operation on closed file.

意思是要讀取的文件已經被關閉了。

由此可知,當with語句運行結束後,被打開的test.txt文件就自動關閉了。

15.4讀取文件

在python 中讀取文件的方法有:

1、讀取指定個數的字元

格式如下:

file.read([size])

其中,file為打開的文件對象。size為可選參數,可以指定要讀取的字元個數,省缺表示讀取所有內容。

在調用read()方法讀取文件內容時,文件必須是以r(只讀)或者r (讀寫)方式打開。

如:

with open('test.txt','r',encoding='utf-8') as file:

txt=file.read() (或txt=file.read(10))

print(txt)

將讀取、輸出test.txt文件的全部內容(或前10個字元)。

2、移動文件的指針

對於剛打開的文件,文件指針總是指向文件頭的。也可以通過seek()方法將文件的指針移動到新的位置。

格式如下:

file.seek(offset[,whence])

其中,file表示已經打開的文件對象;offset用於指定移動的字元個數;whence表示從哪個位置起始計算個數,其值為0表示從文件頭開始計算,其值為1表示從當前位置開始計算,其值為2表示從文件尾開始計算,默認值為0。

例如:

with open('test.txt','r',encoding='utf-8') as file:

string=file.read(9)

print('取9個字元: ' string)

file.seek(2) #指針從文件頭開始移動2個字元

string=file.read(9) #從當前位置讀取10個字元

輸出結果:

取9個字元:

python是一種

取9個字元:

thon是一種解釋


而下面的代碼會拋出錯誤:

with open('test.txt','r',encoding='utf-8') as file:

file.seek(2,1) #指針從當前位置開始移動2個字元

string=file.read(10) #從當前位置讀取10個字元

print('取10個字元: ' string)

錯誤提示為:

traceback (most recent call last):

file "c:.py", line 7, in

file.seek(2,1) #指針從當前位置開始移動2個字元

io.unsupportedoperation: can't do nonzero cur-relative seeks

原因在於,必須使用b模式(即rb)打開文件,才能使用whence參數。但是,b模式(二進制)不適合文本文件。對於test.txt這樣的文本文件,為了解決通過改變指針讀取任意位置字元,可以採用加一個位置變數的方法來存儲指針的值。

例如:

with open('test.txt','r',encoding='utf-8') as file:

#utf-8漢字與英文字元都佔一個字元

string='' #設置一個空字元串

pointer=0 #當前指針為0

str1=file.read(6) #讀取6個字元

pointer =6 #指針變數後移6個字元

string =str1 #string用來存放已讀取的字元

print('取6個字元: ',str1)

file.seek(pointer) #指針從文件頭開始移動2個字元

str1=file.read(8) #從當前位置讀取10個字元

pointer =8 #指針跳過已讀取的字元

string =str1

print('再取8個字元: ',str1)

print('所有讀取的字元: ',string)

print('當前指針所處的位置: ',pointer)

str1=file.read(1)

print('當前指針所處的字元: ',str1)


運行結果如下:

取6個字元:

python

再取8個字元:

是一種解釋型語言

所有讀取的字元:

python是一種解釋型語言

當前指針所處的位置:

14

當前指針所處的字元:


3、讀取一行數據readline()方法

語法格式:

file.readline()

例:

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

string=f.read(1) # 讀取文件的第一個字元

if string != '': # 防止文件為空文件

lineno=0

while true:

line=f.readline()

if line != '':

lineno =1

print('第' str(lineno) '行:' line,end='')

# 因為每行都有自帶的分行符,print()語句不允許換行

else:

break # 出現空行時停止讀取

else:

print('要讀取的文件為空文件!')

運行結果:

第1行:ython是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於php和perl語言。

第2行:python是互動式語言: 這意味著,您可以在一個 python 提示符 >>> 後直接執行代碼。

第3行:python是面向對象語言: 這意味著python支持面向對象的風格或代碼封裝在對象的編程技術。

第4行:python是初學者的語言:python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發。

4、讀取全部行命令readlines()方法

語法格式:

file.readlines()

該方法與read()方法一樣,在調用read()方法讀取文件內容時,文件必須是以r(只讀)或者r (讀寫)方式打開。

例:

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

txt=f.readlines()

print(txt)

運行結果:

['python是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於php和perl語言。 ', 'python是互動式語言: 這意味著,您可以在一個 python 提示符 >>> 後直接執行代碼。 ', 'python是面向對象語言: 這意味著python支持面向對象的風格或代碼封裝在對象的編程技術。 ', 'python是初學者的語言:python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發。 ']

從上面的運行結果可以看出,readlines()方法的返回值為一個字元串列表。所以,也可以以讀取列表元素的方法輸出。如下所示:

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

txt=f.readlines()

for line in txt:

print(line,end='')

運行結果:

python是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於php和perl語言。

python是互動式語言: 這意味著,您可以在一個 python 提示符 >>> 後直接執行代碼。

python是面向對象語言: 這意味著python支持面向對象的風格或代碼封裝在對象的編程技術。

python是初學者的語言:python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發。

15.5 寫入文件內容

語法格式如下:

file.write(string)

其中,file為打開的文件對象,string為要寫入的字元串。

寫入文件內容時,文件必須以w(可寫)或a(追加)模式打開。否則,會拋出如下異常提示:

traceback (most recent call last):

file "c:.py", line 2, in

f.write('人生苦短,我用python!')

io.unsupportedoperation: not writable

關於write()方法的用法舉例如下:

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

f.write('人生苦短,我用python!')

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

txt=f.read()

print(txt)

運行結果:

python是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於php和perl語言。

python是互動式語言: 這意味著,您可以在一個 python 提示符 >>> 後直接執行代碼。

python是面向對象語言: 這意味著python支持面向對象的風格或代碼封裝在對象的編程技術。

python是初學者的語言:python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發。

人生苦短,我用python!

可以看出,由於文件的打開方式為a模式(追加模式),寫入的內容被寫入到文件的末尾。

在python中,文件操作方法里沒有類似於字元串內的計算長度、查找、替換、截取、分隔等方法,為什麼沒有?原因可能是文件的類型太復雜,譬如說二進制文件,上述操作的意義不大。如果僅僅要對文本文件進行上述操作,完全可以先把文件的內容讀取到字元串中,再用相應的字元串函數或方法去操作就可以了。譬如,要將test.txt文件中的字元串『python』替換為』php』,則可以用如下代碼完成:

txt1=''


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

txt1=f.read() #先將文件內容存入字元串txt1中


txt2=txt1.replace('python','php') #將txt1中的'python'替換為'php',並存入txt2


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

f.write(txt2) #將字元串txt2的內容寫回到文件中


這里之所以分兩步打開文件(第一次為r模式,第二次為w模式),而沒有採用一次讀寫(r 、w 方式),因為那樣比較容易出錯。實踐證明,將文件的讀操作和寫操作分開其實是非常正確的選擇。

熱點內容
愛奇藝正義聯盟為啥不能緩存 發布:2024-01-20 00:52:13 瀏覽:248
caccess查詢資料庫 發布:2024-01-20 00:43:10 瀏覽:769
xp文件夾圖標更改 發布:2024-01-20 00:43:03 瀏覽:19
python和node 發布:2024-01-20 00:37:12 瀏覽:194
android拖拉 發布:2024-01-20 00:00:49 瀏覽:583
少兒編程課程體系介紹 發布:2024-01-20 00:00:48 瀏覽:846
我說你做下載ftp 發布:2024-01-20 00:00:47 瀏覽:8
安卓驅動培訓哪裡好 發布:2024-01-19 23:55:41 瀏覽:987
python轉為字元串 發布:2024-01-19 23:51:39 瀏覽:272
合同文件夾 發布:2024-01-19 23:50:52 瀏覽:740
网站地图