導航:首頁 > 編程語言 > pythonopensize

pythonopensize

發布時間:2024-01-09 21:54:58

『壹』 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+方式),因為那樣比較容易出錯。實踐證明,將文件的讀操作和寫操作分開其實是非常正確的選擇。

『貳』 python保存文件

#1.打開文件open函數
open(file,[option])
#file是要打開的文件
#option是可選擇的參數,常見有modeencoding

#2.文件的打開模式
r只讀模式,文件不存在時會報錯。
w寫入模式,文件存在會清空之前的內容,文件不存在則會新建文件。
x寫入模式,文件存在會報錯,文件不存在則會新建文件。
a追加寫入模式,不清空之前的文件,直接將寫入的內容添加到後面。
b以二進制模式讀寫文件,wb,rb,ab。
+可讀寫模式,r+,w+,x+,a+,這幾種模式還遵循了r,w,x,a的基本原則。

#3.文件的讀取
f.read(size)#讀取文件的內容,將文件的內容以字元串形式返回。
'''size是可選的數值,指定字元串長度,如果沒有指定size或者指定為負數,就會讀取並返回整個文件。當文件大小為當前機器內存兩倍時就會產生問題,反之就盡可能大的size讀取和返回數據,如果到了文件末尾,會返回空字元串。
'''

f.readline()#從文件中讀取單獨一行。
'''字元串結尾會自動加上一個換行符 ,只有當文件最後沒有以換行符結尾時,這一操作才會被忽略,這樣返回值就不會有混淆。如果返回空字元串,表示到達率文件末尾,如果是空行,就會描述為 ,一個只有換行符的字元串。
'''

f.readlines()#一次讀取所有,返回一個列表,列表的元素為文件行的內容。
'''可以通過列表索引的方式將文件的每一行的內容輸出。
可以通過for循環迭代輸出每一行的信息。
'''

#4.文件的寫入
f.write() #將要寫入的內容以字元串的形式通過write方法寫入文件中。
f.writelines()#括弧里必須是由字元串元素組成的序列。

#5.保存和關閉
f.flush()
#在讀寫模式下,當寫完的數據想要讀取出來時,要先緩存區的內容保存到文件當中。

f.close()
#關閉文件。對一個已經關閉的文件進行操作會報錯。

#6.游標位置
f.tell() #返回遊標在文件中的位置。
f.seek(offset,from)
#在文件中移動文件指針,從from(0代表起始位置,1代表當前位置,2代表文件末尾)偏移offset個位元組。

#7.查看文件信息
closed #查看文件是否已經關閉,返回布爾值。
mode #返迴文件打開模式。
name #返迴文件名。

#8.with形式打開文件,裡面的語句執行完後會自動關閉文件
withopen('文件名')asf:
f.read()

『叄』 Python3 輸入輸出和File(文件) 方法

Python兩種輸出值的方式: 表達式語句和 print() 函數。第三種方式是使用文件對象的 write() 方法,標准輸出文件可以用 sys.stdout 引用。
如果你希望輸出的形式更加多樣,可以使用 str.format() 函數來格式化輸出值。如果你希望將輸出的值轉成字元串,可以使用 repr() 或 str() 函數來實現。
str(): 函數返回一個用戶易讀的表達形式。
repr(): 產生一個解釋器易讀的表達形式。

str.format() 的使用

讀取鍵盤輸入
Python 提供了 input() 內置函數,從標准輸入讀入一行文本,默認的標准輸入是鍵盤。

open() 用於打開一個文件,並返迴文件對象,基本語法格式如下:
open(filename, mode='r')
完整的語法格式為:
open(filename, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
參數說明:
filename: 必需,文件路徑+文件名稱(相對或者絕對路徑)
mode: 可選,文件打開模式:只讀,寫入,追加等,默認模式為只讀(r)
buffering: 設置緩沖
encoding: 一般使用utf8
errors: 報錯級別
newline: 區分換行符
closefd: 傳入的file參數類型
opener: 設置自定義開啟器,開啟器的返回值必須是一個打開的文件描述符。
不同模式mode打開文件的說明:
t 文本模式 (默認的模式)
b 二進制模式,一般用於非文本文件如圖片等
x 寫模式,新建一個文件,如果該文件已存在則會報錯
+ 打開一個文件進行更新(可讀可寫)
r 以只讀方式打開文件。文件的指針將會放在文件的開頭。是默認模式。
rb 以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。
r+ 打開一個文件用於讀寫。文件指針將會放在文件的開頭。
rb+ 以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。
w 打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
wb 以二進制格式打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
w+ 打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
wb+ 以二進制格式打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
a 打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
ab 以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
a+ 打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。
ab+ 以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。

f.write(string) 將 string 寫入到文件中, 然後返回寫入的字元數
f.writelines(sequence) 向文件寫入一個序列字元串列表,如果需要換行則要自己加入每行的換行符。

f.read(size) 讀取一定數目的數據, 然後作為字元串或位元組對象返回。size 是一個可選參數。當 size 參數忽略或者為負, 那麼該文件的所有內容都將被讀取並且返回。
f.readline() 從文件中讀取單獨的一行。換行符為 '\n'。讀取整行,包括 "\n" 字元。f.readline() 如果返回一個空字元串, 說明已經讀取到最後一行。
f.readlines([sizeint])] 讀取所有行並返回列表類型,若給定sizeint>0,返回總和大約為sizeint位元組的行, 並且將這些位元組按行分割。實際讀取值可能比 sizeint 較大, 因為需要填充緩沖區。

f.tell() 返迴文件對象當前所處的位置, 它是從文件開頭開始算起的位元組數。
f.seek() 移動文件讀取指針到指定位置,如果要改變文件當前的位置, 可以使用f.seek(offset, from_what) 函數。from_what 的值(默認為0), 如果是 0 表示開頭, 如果是 1 表示當前位置, 2 表示文件的結尾,例如:
seek(x,0) : 從起始位置即文件首行首字元開始移動 x 個字元
seek(x,1) : 表示從當前位置往後移動x個字元
seek(-x,2):表示從文件的結尾往前移動x個字元

file.flush() 刷新文件內部緩沖,直接把內部緩沖區的數據立刻寫入文件, 而不是被動的等待輸出緩沖區寫入
file.fileno() 返回一個整型的文件描述符(file descriptor FD 整型), 可以用在如os模塊的read方法等一些底層操作上
file.isatty() 如果文件連接到一個終端設備返回 True,否則返回 False
file.truncate([size]) 從文件的首行首字元開始截斷,截斷文件為 size 個字元,無 size 表示從當前位置截斷;截斷之後後面的所有字元被刪除,其中 windows 系統下的換行代表2個字元大小。
f.close() 關閉文件並釋放系統的資源。關閉後文件不能再進行讀寫操作,否則會拋出異常
當處理一個文件對象時, 使用 with 關鍵字是非常好的方式。在結束後, 它會幫你正確的關閉文件。 而且寫起來也比 try - finally 語句塊要簡短:

python的pickle模塊實現了基本的數據序列和反序列化。通過pickle模塊的序列化操作能夠將程序中運行的對象信息保存到文件中去,永久存儲。通過pickle模塊的反序列化操作能夠從文件中創建上一次程序保存的對象。
基本介面:
pickle.mp(obj, file, [,protocol])
有了 pickle 對象, 就能對 file 以讀取的形式打開:
x = pickle.load(file)
從 file 中讀取一個字元串,並將它重構為原來的python對象。
示例:使用pickle模塊將數據對象保存到文件

示例:使用pickle模塊從文件中重構python對象

『肆』 python讀寫文件

讀文件

    1)使用open()方法打開文件,返回一個文件對象

        原型:open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

        舉例:f = open('test.txt', 'r')

        test.txt表示文件路徑(包含文件名,這個file參數可以是絕對或者相對路徑)

        r表示是讀文本文件,rb是讀二進制文本文件。(這個mode參數默認值就是r)

    2)使用close()方法關閉文件

        f.close()

        打開後的文件必須關閉,因為文件對象會佔用系統資源,系統打開文件數量也就有限了

    3)打開文件時的異常處理

        f=open('test.txt', 'r')

        f.read()

        f.close()

        FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'

        文件讀寫時都有可能產生異常IOError(比如文件不存在),這樣其後面的f.read(),f.close()就不會調用。為保證無論是否異常都可以關閉文件,一般使用try ... finally來處理:

        try:

            f = open('test.txt', 'r')

            f.read()

        finally:

            if f:

                f.close()

        但這種寫法過於繁瑣,所以Python引入了with語句來自動調用close()方法:

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

            f.read()

    4)讀文件 - read()、readline() 和 readlines()

        read() 一次讀取整個文件,它通常用於將文件內容放到一個字元串變數中。如果文件過大,內存不夠,可以通過反復調用read(size)方法,每次最多讀取size個位元組的內容。

        readline() 一次讀取文件中一行內容,可反復調用

        readlines() 一次讀取所有內容並按行返回列表,該列表可以由for ... in ... 結構再進一步處理。

        特別注意:

        這三種方法是把每行末尾的'\n'也讀進來了,如有需要就得我們手動去掉'\n'

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

            list = f.readlines()

        for i in range(0, len(list)):

            list[i] = list[i].rstrip('\n')

寫文件

    1)寫文件和讀文件是一樣的,唯一區別是open文件時,傳入標識符不同,即'w'或者'wb'表示寫文本文件或寫二進制文件

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

    f = open('test.txt', 'wb')

    f = open('test.txt', 'a')

    f.close()

    特別注意:

    1. 如果沒有這個文件,會自動創建一個新文件;如果有,就會先把原文件的內容清空再寫入;若不想清空原來的內容而是直接在後面追加新的內容,就用'a'這個模式

    2. 寫文件,操作系統往往不會立刻把數據寫入磁碟,而是放到內存緩存起來,空閑的時候再慢慢寫入。只有調用close()方法時,操作系統才保證把沒有寫入的數據全部寫入磁碟。忘記調用close()的後果是數據可能只寫了一部分到磁碟,剩下的丟失了。

    2)寫文件 - write()、writelines()

    write()方法和read()、readline()方法對應,是將字元串寫入到文件中。

    writelines()方法和readlines()方法對應,也是針對 列表 的操作。它接收一個 字元串列表 作為參數,將他們寫入到文件中。

    特別注意:

    換行符不會自動的加入,需要顯式的加入換行符。

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

    f.writelines(["111\n", "222\n", "333\n"])

補充說明:

1)對於非默認編碼(utf-8)的文件,需要open時添加encording參數,選擇對應的編碼方式

2)r+, w+, a+,可讀可寫

3)seek()方法,移動文件指針

seek(offset[, whence]) ,offset是相對於某個位置的偏移量。位置由whence決定,默認whence=0,從開頭起;whence=1,從當前位置算起;whence=2相對於文件末尾移動,通常offset取負值。

『伍』 python怎麼打開文件模式

讀寫文件是最常見的IO操作。Python內置了讀寫文件的函數,用法和C是兼容的。
讀寫文件前,我們先必須了解一下,在磁碟上讀寫文件的功能都是由操作系統提供的,現代操作系統不允許普通的程序直接操作磁碟,所以,讀寫文件就是請求操作系統打開一個文件對象(通常稱為文件描述符),然後,通過操作系統提供的介面從這個文件對象中讀取數據(讀文件),或者把數據寫入這個文件對象(寫文件)。
讀文件
要以讀文件的模式打開一個文件對象,使用Python內置的open()函數,傳入文件名和標示符:
>>> f = open('/Users/michael/test.txt', 'r')

標示符'r'表示讀,這樣,我們就成功地打開了一個文件。
如果文件不存在,open()函數就會拋出一個IOError的錯誤,並且給出錯誤碼和詳細的信息告訴你文件不存在:
>>> f=open('/Users/michael/notfound.txt', 'r')
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'

如果文件打開成功,接下來,調用read()方法可以一次讀取文件的全部內容,Python把內容讀到內存,用一個str對象表示:
>>> f.read()'Hello, world!'

最後一步是調用close()方法關閉文件。文件使用完畢後必須關閉,因為文件對象會佔用操作系統的資源,並且操作系統同一時間能打開的文件數量也是有限的:
>>> f.close()

由於文件讀寫時都有可能產生IOError,一旦出錯,後面的f.close()就不會調用。所以,為了保證無論是否出錯都能正確地關閉文件,我們可以使用try ... finally來實現:
try:
f = open('/path/to/file', 'r')
print(f.read())finally: if f:
f.close()

但是每次都這么寫實在太繁瑣,所以,Python引入了with語句來自動幫我們調用close()方法:
with open('/path/to/file', 'r') as f:
print(f.read())

這和前面的try ... finally是一樣的,但是代碼更佳簡潔,並且不必調用f.close()方法。
調用read()會一次性讀取文件的全部內容,如果文件有10G,內存就爆了,所以,要保險起見,可以反復調用read(size)方法,每次最多讀取size個位元組的內容。另外,調用readline()可以每次讀取一行內容,調用readlines()一次讀取所有內容並按行返回list。因此,要根據需要決定怎麼調用。
如果文件很小,read()一次性讀取最方便;如果不能確定文件大小,反復調用read(size)比較保險;如果是配置文件,調用readlines()最方便:
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'刪掉

file-like Object
像open()函數返回的這種有個read()方法的對象,在Python中統稱為file-like Object。除了file外,還可以是內存的位元組流,網路流,自定義流等等。file-like Object不要求從特定類繼承,只要寫個read()方法就行。
StringIO就是在內存中創建的file-like Object,常用作臨時緩沖。
二進制文件
前面講的默認都是讀取文本文件,並且是UTF-8編碼的文本文件。要讀取二進制文件,比如圖片、視頻等等,用'rb'模式打開文件即可:
>>> f = open('/Users/michael/test.jpg', 'rb')>>> f.read()b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六進製表示的位元組

字元編碼
要讀取非UTF-8編碼的文本文件,需要給open()函數傳入encoding參數,例如,讀取GBK編碼的文件:
>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')>>> f.read()'測試'

遇到有些編碼不規范的文件,你可能會遇到UnicodeDecodeError,因為在文本文件中可能夾雜了一些非法編碼的字元。遇到這種情況,open()函數還接收一個errors參數,表示如果遇到編碼錯誤後如何處理。最簡單的方式是直接忽略:
>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')

寫文件
寫文件和讀文件是一樣的,唯一區別是調用open()函數時,傳入標識符'w'或者'wb'表示寫文本文件或寫二進制文件:
>>> f = open('/Users/michael/test.txt', 'w')>>> f.write('Hello, world!')>>> f.close()

你可以反復調用write()來寫入文件,但是務必要調用f.close()來關閉文件。當我們寫文件時,操作系統往往不會立刻把數據寫入磁碟,而是放到內存緩存起來,空閑的時候再慢慢寫入。只有調用close()方法時,操作系統才保證把沒有寫入的數據全部寫入磁碟。忘記調用close()的後果是數據可能只寫了一部分到磁碟,剩下的丟失了。所以,還是用with語句來得保險:
with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')

要寫入特定編碼的文本文件,請給open()函數傳入encoding參數,將字元串自動轉換成指定編碼。
細心的童鞋會發現,以'w'模式寫入文件時,如果文件已存在,會直接覆蓋(相當於刪掉後新寫入一個文件)。如果我們希望追加到文件末尾怎麼辦?可以傳入'a'以追加(append)模式寫入。
所有模式的定義及含義可以參考Python的官方文檔。

『陸』 Python DearPyGui 常用控制項一

菜單欄是一個 GUI 應用中重要的控制項,始終顯示在窗口頂部,並具有三個主要部分:

菜單可以根據需要嵌套,而且任何控制項都可以添加到菜單中,例如下面栗子中的 「控制項列表」 菜單。

通過 select_directory_dialog 來調用目錄對話框,而且必須為其提供回調方法。 回調方法返回的 data 參數中將包含 目錄路徑 文件夾路徑 。通常,目錄對話框是由另一個控制項(例如下面栗子中的按鈕)調用的。

通過 open_file_dialog 可以調用文件對話框,同樣,必須為其提供回調方法,回調方法返回的 data 參數中將包含 目錄路徑 文件名稱 。 extensions 是文件對話框的可選參數,可以設置對文件擴展名的過濾,控制顯示哪些後綴名的文件。

Dear PyGui 具有 simple_plot (簡單繪圖)和 plot (繪圖)兩個繪圖方式,兩者都是動態的。 simple_plot (簡單繪圖)接受列表參數,並基於列表中的數據數據繪制 y軸 數據,可以是折線圖或直方圖。

而 plot (繪圖)則具有更多的功能,繪圖同時使用 x軸 和 y軸 坐標,使用 add_plot 方法創建,然後可以將數據作為線形圖或散布圖添加, plot (繪圖)的特點有:

另外,滑鼠停留在繪圖上時,會出現數值類型的浮動文本。

通過 set_value 方法可以更改繪圖調用的值,使 simple_plot (簡單繪圖)實現動態實時繪制。

同樣的, plot (繪圖)也可以動態實時繪制,舉個栗子,我們使用 set_render_callback 設置一個渲染回調實現動態繪制。

Dear PyGui 有一個低級繪圖 API,可以用來原始繪畫、自定義控制項甚至動態繪畫。先通過調用 add_drawing 方法開始繪畫,再通過調用各種繪畫方法來添加筆畫。需要注意的是,畫布的原點位於左下角。

繪畫( drawing )具有可以獲取和設置的縮放( origin )、原點( origin )和尺寸( size )屬性,縮放( origin )是 x 和 y 值的乘數,尺寸( size )以像素為單位。

繪畫( drawing )可以顯示的圖像類型有 .png 、 .jpg 、 .bmp ,使用時需掉用 draw_image 以繪制圖像。通過 pmin 和 pmax 參數,我們可以將圖像繪制到畫布上矩形的左上和右下區域,圖像會縮放自動縮放以適應指定區域。

使用 uv_min 和 uv_max 參數,我們可以控制圖像要繪制到哪個區域的 標量(scalar) ,默認情況下, uv_min = [0,0] 和 uv_max = [1,1] 將顯示整個圖像,而 uv_min = [0,0] 和 uv_max = [0.5,0.5] 則僅顯示圖形的一部分。

盡管我們可以通過清除和重繪整個圖來實現圖形的動態化,但是 DearPyGui 還提供了一種更有效的方法,要使繪畫( drawing )動態化,應該使用 tag 參數標記要重繪的控制項,然後,只要使用相同的標簽去調用。這樣,我們就能實現僅清除該控制項,並將其重新繪制。

『柒』 Python 文件操作

open(filename[,mode,encoding="編碼"]) :第一個參數文件名如果不加路徑,默認在該py文件目錄下(路徑舉例: E:/XXX或E:\xxx ),第二個是模式,默認為 'r' ——只讀,舉例: f = open('E:/abc.txt') ,如果要轉編碼並寫入模式:
f = open('E:/abc.txt','w',encoding='utf-8')
1. 模式

2. 方法
(1) close() : 關閉文件,因為文件寫入時是寫在內存,只有關閉時才寫入硬碟,所以寫完記得關閉
(2) read(size = -1) :讀取文件size個字元,不寫默認是-1,此時讀取所有內容(換行按 來表示,很不好看),並作為字元串返回,一定要注意 讀完以後文件指針將會指向末尾 ,所以下一次在用read方法時會發現讀取不出內容了,所以這個就要用seek移動指針或者關閉文件重新定義
(3) tell() :返回當前文件指針指向的位置
(4) seek(offset,from) :移動文件指針,代表從from參數開始偏移offset個位元組,0代表起始位置,1代表當前位置,2代表文件末尾
(5) readline() :按序列讀取一行內容,默認 為邊界
(6) write() :寫入內容,但必須要有寫入許可權才行,否則報錯,寫完會返回寫入的長度,例如: len1 = f.write('abc') ,此時len1就為3
(7) truncate() :刪除內容,把當前指針以後的內容全刪了,舉例:

註:
1.文件還可以轉化為 list 之類的,例如: list1 = list(f) ,此時文件內容的按 被隔開,然後可以用for語句讀取文件所有內容,舉例:

2.上面輸出文件內容方法相對低效,所以一般都直接用for輸出整個文件,舉例:

通過 fileno 函數,我們可以查看一個文件對應的文件描述符,對應的是程序中打開的文件序號,舉例:

可以看出python在啟動時會先啟動標准流的文件(文件描述符分別為:0/1/2),所以之後打開的文件就從3開始遞增,當釋放一個文件資源時,該描述符序號被釋放,之後打開的文件可以繼續使用該序號的文件描述符

python中的 print 的本質是通過 sys.stdout 來進行內容輸出,而 sys.stdout 的本質是一個"文件",相當於我們所有的輸入輸出的本質都是在對 sys.stdin / sys.stdout / sys.stderr 這些文件來進行讀寫操作,舉例:

open 函數不僅可以打開本地文件,也可以打開文件描述符,而該參數默認為 True ,代表 close 後會將對應的文件資源釋放,而對於一些文件描述符,我們只是希望 close 時將打開文件描述符的對象釋放,而不釋放對應的文件資源,那麼則可以設置 closefd=False ,舉例:

需要使用到 chardet 模塊,按二進制可讀打開文件,然後通過 detect() 方法查看,舉例:

所以就可以根據文件來設置編碼了:

有時候使用文件的編碼解碼也可能會出現無法解析的情況,例如兩種編碼混在同一個文件里的時候,此時可以設置 errors 參數為 ignore 來避免該問題,示例:

可用 os 模塊下的 chmod() 函數,具體參考: http://www.runoob.com/python/os-chmod.html

使用 os 模塊下的 remove() 函數可以實現刪除文件,舉例:

可以使用自帶的 zipfile 模塊來進行操作,舉例:

可以使用自帶的 tarfile 模塊來進行操作,舉例:

https://www.cnblogs.com/lotusto/p/5805543.html

『捌』 Python文件讀寫

常見的讀寫操作:

Python內置了讀寫文件的函數,用法和C是兼容的。本節介紹內容大致有:文件的打開/關閉、文件對象、文件的讀寫等。僅示例介紹 TXT 類型文檔的讀寫,也就是最基礎的文件讀寫,也需要注意編碼問題;

open()   close()     with open(...) as ...

看以下示例就能了解 Python 的 open() 及 close() 函數。這邊調用 read()方法可以一次讀取文件的全部內容,Python把內容讀到內存,用一個str對象表示,具體使用參見下文。

在 E 盤 python_file 文件夾下新建一 a.txt,輸入隨意,如下:

Python 操作 打開及關閉方式 如下:

注意 open() 之後 一定要 close()。但由於文件讀寫時都可能產生IOError,為了保證無論是否出錯都能正確地關閉文件,我們用 try ... finally 來實現:

python 簡化了改寫法,即用 with open(...) as ...  ; 建議之後文件讀寫都用該寫法:

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

相關參數:

File 對象

file 為一對象,它有一些內置屬性,如下

file對象的屬性:

read()    read(size)   readline()   readlines()

之前的例子已經接觸到了 read() 函數,該函數會會一次性讀取文件的全部內容,如果能確保文件的大小,自然可以。但若文件過大,內存就爆了,所以,可以反復調用read(size)方法,每次最多讀取size個位元組的內容;也可調用 readline() 每次讀取一行內容;而調用readlines()可以一次讀取所有內容並按行返回list。總之,根據需求來。僅以 txt 文件為例,其他的文件讀取需要特殊處理;另外,文件的格式編碼方式也需要注意;這邊僅介紹讀取方法,其他的會出專題來學習。

在D:\python_file 下新建 poet.txt;示例如下,由於一個中文會佔多個位元組,故read(size) 部分會亂碼,如:

write()

寫文件和讀文件是一樣的,唯一區別是調用open()函數時,傳入標識符'w'或者'wb'表示寫文本文件或寫二進制文件;'a' 對應的表示追加等。

如下示例,由於 write.txt 文件不存在,創建該文件並寫入:

在上例基礎上,繼續,該文件被重寫:

繼續,這次使用追加,會在文件結尾追加:

https://blog.csdn.net/msspark/article/details/86745391

https://www.cnblogs.com/tianyiliang/p/8192703.html

https://www.cnblogs.com/camilla/p/7234657.html

https://blog.csdn.net/songlh1234/article/details/83316468

https://www.php.cn/python-tutorials-412484.html

https://blog.csdn.net/weay/article/details/80946152

https://blog.csdn.net/xc_zhou/article/details/81044836

閱讀全文

與pythonopensize相關的資料

熱點內容
php發送郵件鏈接 瀏覽:32
創維冰箱壓縮機 瀏覽:869
nginxopenssl交叉編譯 瀏覽:750
相機卡無法創建新文件夾 瀏覽:225
單片機照明控制系統程序代碼 瀏覽:10
服務編程一體化 瀏覽:471
tx小霸王伺服器是什麼意思 瀏覽:545
計算機編程工齡工資怎麼算 瀏覽:491
macandroid配置環境變數 瀏覽:854
做項目文件夾的圖標 瀏覽:327
數控車床車軸編程教程 瀏覽:728
怎麼解壓截圖軟體 瀏覽:885
演算法符號橢圓 瀏覽:174
網路螞蟻app是什麼 瀏覽:273
php面向對象編程開發 瀏覽:798
唱吧如何解綁其他app 瀏覽:318
程序員去工廠好嗎 瀏覽:497
阿里雲租伺服器企業要實名認證嗎 瀏覽:928
mfc圖形怎麼輸入命令 瀏覽:653
為什麼開機畫面有安卓標志呢 瀏覽:317