Python中存取文件的4種不同操作
前言:
最近開始學(xué)習(xí)tensorflow框架,選修課讓任選一種框架實(shí)現(xiàn)mnist手寫數(shù)字的識(shí)別分類。小詹也就隨著大流選擇了 tf 框架,跟著教程邊學(xué)邊做,小詹用了不同的神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)了識(shí)別分類,其中有一個(gè)步驟是將訓(xùn)練過程得到的模型進(jìn)行保存,在之后的測(cè)試中加載并使用該模型。想到這種先保存再加載調(diào)用的過程,之前很多地方都遇到過呀,最簡(jiǎn)單常用的就是python中文件的存取哇!具體如下。
(PS:雖然我知道技術(shù)文章太長(zhǎng),耐心看完的人很少,曝光率和點(diǎn)贊率會(huì)下降,更不會(huì)有什么收益,但是還是想記錄下自己學(xué)習(xí)過程中的一些筆記,以后自己或者別人查起來方便些?。?/p>
方法預(yù)覽
●Python內(nèi)置方法
●numpy模塊方法
●os模塊方法
●csv模塊方法
Python內(nèi)置方法
在不需要借助任何外界庫(kù)的前提下,python內(nèi)置方法其實(shí)也可以完成我們需要的文件存取任務(wù),這里主要介紹幾種python內(nèi)置方法的使用方式,最后再給出一個(gè)實(shí)際案例展示:
1、open()方法
file object = open(file_name [, access_mode][, buffering])
該方法意義在于按照指定模式打開文件,其中,各個(gè)參數(shù)的含義如下:
file_name:file_name變量是一個(gè)包含了你要訪問的文件名稱的字符串值。
access_mode:access_mode決定了打開文件的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個(gè)參數(shù)是非強(qiáng)制的,默認(rèn)文件訪問模式為只讀(r)。常用文件訪問模式見下圖(來源于網(wǎng)絡(luò))
buffering: 如果buffering的值被設(shè)為0,就不會(huì)有寄存。如果buffering的值取1,訪問文件時(shí)會(huì)寄存行。如果將buffering的值設(shè)為大于1的整數(shù),表明了這就是的寄存區(qū)的緩沖大小。如果取負(fù)值,寄存區(qū)的緩沖大小則為系統(tǒng)默認(rèn)。
2、close()方法
fileObject.close()
File 對(duì)象的 close()方法刷新緩沖區(qū)里任何還沒寫入的信息,并關(guān)閉該文件,這之后便不能再進(jìn)行寫入。當(dāng)一個(gè)文件對(duì)象的引用被重新指定給另一個(gè)文件時(shí),Python 會(huì)關(guān)閉之前的文件。用 close()方法關(guān)閉文件是一個(gè)很好的習(xí)慣。
3、write ()方法
fileObject.write(string)
write()方法可將任何字符串寫入一個(gè)打開的文件。需要重點(diǎn)注意的是,Python字符串可以是二進(jìn)制數(shù)據(jù),而不是僅僅是文字。write()方法不會(huì)在字符串的結(jié)尾添加換行符('\n');被傳遞的參數(shù)是要寫入到已打開文件的內(nèi)容。
4、read () 方法
fileObject.read([count])read()
方法從一個(gè)打開的文件中讀取一個(gè)字符串。需要重點(diǎn)注意的是,Python字符串可以是二進(jìn)制數(shù)據(jù),而不是僅僅是文字。被傳遞的參數(shù)是要從已打開文件中讀取的字節(jié)計(jì)數(shù)。該方法從文件的開頭開始讀入,如果沒有傳入count,它會(huì)嘗試盡可能多地讀取更多的內(nèi)容,很可能是直到文件的末尾。
5、舉例分析
一般情況,建議小伙伴們使用with ...as...寫法,這種會(huì)在執(zhí)行完代碼塊后自動(dòng)close,既可以簡(jiǎn)化程序,又可以避免自己粗心或者其他原因造成的不必要錯(cuò)誤,下面給出一個(gè)實(shí)際案例。
#先用open方法打開(不存在則創(chuàng)建)一個(gè)文件, #write方法寫入內(nèi)容,這里with寫法不用手動(dòng)close #注意這里是模式‘a(chǎn)',意味著寫入內(nèi)容不覆蓋已有內(nèi)容 with open('test.txt','a') as file_test: file_test.write('小詹是個(gè)美男子!\n') file_test.write('請(qǐng)關(guān)注公眾號(hào)【小詹學(xué)python】!\n')
#注意利用read方法讀取內(nèi)容,模式要設(shè)置為可讀模式 #read()方法不帶參數(shù),表示默認(rèn)讀取最長(zhǎng)內(nèi)容 with open('test.txt','r') as file_test: str = file_test.read() print(str)
輸出結(jié)果會(huì)在目錄下多出一個(gè)test.txt文件,并讀取后輸出所有內(nèi)容,下圖為執(zhí)行了三次的結(jié)果,說明模式‘a'不會(huì)覆蓋已有內(nèi)容(重要的事情說三遍?。?/p>
numpy模塊方法
這里主要介紹numpy模塊中的兩個(gè)常用方法,用于保存讀取數(shù)據(jù)。
np.loadtxt(filename, dtype=int, delimiter=' ') np.savetxt(filename, a, fmt="%d", delimiter=",")
其中,filename為要保存或讀取的文件名,a為存取的內(nèi)容,delimiter為分隔符號(hào)。這個(gè)使用很簡(jiǎn)單,代碼如下:
import numpy as np a=np.arange(0,10,0.5).reshape(4,-1) #改為保存為整數(shù),以逗號(hào)分隔 np.savetxt("a.txt",a,fmt="%d",delimiter=",") #load時(shí)也要指定為逗號(hào)分隔 b = np.loadtxt("a.txt",delimiter=",") print('b=\n',b)
其運(yùn)行結(jié)果,創(chuàng)建了一個(gè)名為’a.txt‘ 的文件,保存了數(shù)組,并print打印出來讀取結(jié)果,如下圖:
os模塊方法
python中的os模塊很強(qiáng)大,提供了許多文件處理操作的方法。以下列舉出常用的幾種方法。
1、os.open()
os.open(file, flags[, mode]);
其中,參數(shù)含義為:
file -- 要打開的文件
flags -- 該參數(shù)可以是以下選項(xiàng),多個(gè)使用 "|" 隔開:
- os.O_RDONLY: 以只讀的方式打開
- os.O_WRONLY: 以只寫的方式打開
- os.O_RDWR : 以讀寫的方式打開
- os.O_NONBLOCK: 打開時(shí)不阻塞
- os.O_APPEND: 以追加的方式打開
- os.O_CREAT: 創(chuàng)建并打開一個(gè)新文件
- os.O_TRUNC: 打開一個(gè)文件并截?cái)嗨拈L(zhǎng)度為零(必須有寫權(quán)限)
- os.O_EXCL: 如果指定的文件存在,返回錯(cuò)誤
- os.O_SHLOCK: 自動(dòng)獲取共享鎖
- os.O_EXLOCK: 自動(dòng)獲取獨(dú)立鎖
- os.O_DIRECT: 消除或減少緩存效果
- os.O_FSYNC : 同步寫入
- os.O_NOFOLLOW: 不追蹤軟鏈接
2、os.rename(current_name,new_name)方法用于更改文件名稱
3、os.remove(filename)方法用于刪除指定文件
4、os.mkdir('newdir')方法用于創(chuàng)建單層目錄,如果該目錄已存在會(huì)拋出異常
5、os.chdir('newdir')方法用于改變當(dāng)前工作目錄
6、os.getcwd()方法獲取當(dāng)前工作目錄
7、os.write(fd,str)向指定文件寫入內(nèi)容,注意str要轉(zhuǎn)換成byte
這里注意針對(duì)內(nèi)容的寫入舉例,注意str要轉(zhuǎn)換成byte,否則會(huì)報(bào)錯(cuò)(a bytes-like object is required, not ‘str’)!
import os # # 打開文件 fd = os.open("f1.txt",os.O_RDWR|os.O_CREAT) # # 寫入字符串 line = "this is xiaozhan" b = str.encode(line) os.write(fd,b) # #直接寫str報(bào)錯(cuò):a bytes-like object is required, not ‘str' os.close(fd) #以可讀模式打開 fd = os.open("f1.txt",os.O_RDWR) ret = os.read(fd,16) print(ret) os.close(fd) print('finish close') # os.remove('f1.txt')
運(yùn)行結(jié)果如下:
csv模塊方法
和前幾種方法一樣,主要是讀取和寫入兩個(gè)部分。主要依靠csv.reader(),csv.writer()和writerow()方法。和前邊幾種大同小異,這里直接代碼中講解基礎(chǔ)的使用方式。
import csv with open('l.csv', 'w',newline='') as csvfile: #csv.writer()方法創(chuàng)建 eWriter = csv.writer(csvfile) #用writerow()方法逐行寫入 eWriter.writerow(['ID', '名字', '粉絲數(shù)量']) eWriter.writerow(['xiaoxiaozhantongxue','小詹學(xué)python',15000]) eWriter.writerow(['xiaoxiaozhantongxue','小詹學(xué)python',15000]) eWriter.writerow(['xiaoxiaozhantongxue','小詹學(xué)python',15000]) #打開文件,用with打開可以不用去特意關(guān)閉file了,python3不支持file()打開文件,只能用open() with open('l.csv','r') as csvfile: #讀取csv文件,返回的是迭代類型 read = csv.reader(csvfile) for i in read: print(i)
運(yùn)行結(jié)果如下圖:
以上就是本次整理的內(nèi)容了,方便自己查閱也希望對(duì)各位讀者有一丟丟用噢!文章太長(zhǎng),耐心看到這的,我得給你點(diǎn)個(gè)贊,送你一個(gè)么么噠。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Python?Selenium無法打開Chrome瀏覽器處理自定義瀏覽器路徑的問題及解決方法
Python?Selenium控制Chrome瀏覽器的過程中,由于安裝的Chrome瀏覽器的版本找不到對(duì)應(yīng)版本的驅(qū)動(dòng)chromedriver.exe文件,下載了小幾個(gè)版本號(hào)的驅(qū)動(dòng)軟件都無法正常使用,下面通過本文介紹Python?Selenium無法打開Chrome瀏覽器處理自定義瀏覽器路徑的問題,需要的朋友可以參考下2024-08-08Pyqt+matplotlib 實(shí)現(xiàn)實(shí)時(shí)畫圖案例
這篇文章主要介紹了Pyqt+matplotlib 實(shí)現(xiàn)實(shí)時(shí)畫圖案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03drf-router和authenticate認(rèn)證源碼分析
在 Rest Framework 中提供了兩個(gè) router , 可以幫助我們快速的實(shí)現(xiàn)路由的自動(dòng)生成,本文通過實(shí)例代碼給大家介紹drf-router和authenticate認(rèn)證源碼分析,感興趣的朋友跟隨小編一起看看吧2021-07-07Tensorflow tensor 數(shù)學(xué)運(yùn)算和邏輯運(yùn)算方式
這篇文章主要介紹了Tensorflow tensor 數(shù)學(xué)運(yùn)算和邏輯運(yùn)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06使用Python下的XSLT API進(jìn)行web開發(fā)的簡(jiǎn)單教程
這篇文章主要介紹了使用Python下的XSLT API進(jìn)行web開發(fā)的簡(jiǎn)單教程,本文來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下2015-04-04Python關(guān)于__name__屬性的含義和作用詳解
在本篇文章里小編給大家分享的是關(guān)于Python關(guān)于__name__屬性的含義和作用知識(shí)點(diǎn),需要的朋友們可以參考下。2020-02-02