Python學習之路 檔案

2021-08-20 19:40:09 字數 3522 閱讀 6589

檔案存在的意義:使得資料持久化。當程式在執行的時候,所有的資料都是在記憶體上的,程式一結束記憶體的資料就會消失。檔案是儲存在硬碟上的,硬碟上的資料是可以長時間儲存的,因此想要儲存資料就要進行檔案操作。歸根究底,檔案只有兩個操作:讀、寫。

在window下,檔案分為很多不同的格式而且預設以後綴來區分,之所以要分成各種不同的檔案是為了方便對種類不同檔案進行操作。

f = open("test.txt","w")

f.write("hello python!")

f.close()

以上**執行後會在當前程式所在的目錄下生成乙個test.txt檔案,檔案的內容是:hello python!。

**中open()函式的第乙個引數是檔名,第二個引數是開啟的模式,r代表讀,w代表寫。以r方式開啟的檔案不能進行w操作,以w方式開啟的檔案不能進行r操作。open()函式返回乙個檔案物件,通過這個檔案物件來進行檔案的操作。操作完檔案後使用close()方法關閉檔案。

使用with.......as關鍵字,這種方式不用擔心沒有關閉檔案的問題。

with open("test2.txt","w") as f2:

f2.write("123456")

如果檔案是以w方式開啟並且檔案已經存在,檔案的原由內容會被覆蓋。

在作業系統中為了標識某乙個檔案所在的位置,提出了檔案路徑可以表示為絕對路徑和相對路徑兩種形式。

在window系統中,如果乙個路徑是以碟符開始表示的那就是乙個絕對路徑,如:c:\users\me\desktop。需要注意的是「\」是反斜槓,在實際的**程式設計中有特殊的意義,因此在**中出現絕對路徑需要使用轉義字元

相對路徑多在**中使用,試想如果你自己在**中以絕對路徑開啟乙個檔案,而這個絕對路徑在另乙個人的電腦上卻沒有,那麼程式便不能正常執行。因此在實際的開發過程中使用相對路徑。

相對路徑是相對於程式當時所在的路徑為基準,表示當前路徑的話可以使用.  ,當前路徑的上一級可以使用  ../  。

上面程式中已經建立了test.txt檔案,現在來以相對路徑的方式讀出檔案內容。

f = open("./test.txt","r")

read_result = f.read()

print(read_result)

f.close()

open()函式的第二個引數,模式還有其他寫法,一起看一下。

模式    說明r

以唯讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。

w開啟乙個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。

a開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。

rb以二進位制格式開啟乙個檔案用於唯讀。檔案指標將會放在檔案的開頭。這是預設模式。

wb以二進位制格式開啟乙個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。

ab以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。

r+開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。

w+開啟乙個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。

a+開啟乙個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫

rb+以二進位制格式開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。

wb+以二進位制格式開啟乙個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。

ab+以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。

read():讀取檔案全部內容到記憶體。當檔案比較大的時候,可能會導致程式出現問題。

with open("test.txt","r") as f:

content = f.read()

print(content)

read(字元數):讀取指定數量的字元數到記憶體。

with open("test.txt","r") as f:

content = f.read(10)

print(content)

readlines():同樣是讀取全部內容到記憶體,但是返回的是乙個列表,列表中的每乙個元素就是一行資料

with open("test.txt","r") as f:

content = f.readlines()

print(content)

當讀取大檔案的時候要結合while()迴圈並使用read(字元數)或者readline(),當檔案讀到末尾的時候退出迴圈。

with open("test.txt","r") as f:

while true:

content = f.readline()

if len( content) == 0:

break

print("%s" % content,end="")

操作檔案(讀、寫)的時候會有檔案指標存在,當開啟的檔案的時候檔案指標是指向檔案開頭的,每次讀取之後檔案指標就會往後移動相應的字元數。看下面的例子:

with open("test.txt","w+") as f:

f.write("hello world!")

content = f.read()

print(content)

執行後會發現並沒有輸出任何值,因為當你read的時候檔案指標已經位於檔案的末尾了,從末尾開始讀肯定讀不到任何資料。

tell():獲得檔案當前的偏移

seek(offset,whence):在whence的基礎上偏移offset個字元,whence有三種取值:0,1,2。0表示檔案開頭,1表示檔案的當前指標的位置,2表示檔案末尾。在python3中只能相對與檔案的開頭進行偏移。

在上面的例子中,檔案指標已經到了檔案末尾,如果想讀出檔案的內容需要將檔案指標移動到檔案開頭。

with open("test.txt","w+") as f:

f.write("hello world!")

current = f.tell()

print("current:",current)

f.seek(0,0)

content = f.read()

print(content)

Python學習之路

python 十分鐘入門 python 菜鳥教程 pycharm安裝numpy python 檔案讀取 with open xml path,r as fr content fr.read python讀取檔案時提示 unicodedecodeerror gbk codec can t decode...

python學習之路

簡單理解下,yield可以先看作 return 直接返回某個值,返回之後程式就不再往下執行了。看做return之後再把它看做乙個是生成器 generator 的一部分 帶yield的函式才是真正的迭代器 def foo print starting.while true res yield 4pri...

python學習之路

1 讀純文字檔案 file open file.close 做好前置準備,以及首尾語句 1 file open chinese.txt mode r encoding utf 8 content file read print content file close 2 寫純文字檔案 引數mode r...