標籤:body 推薦 獲得 readlines 操作 例子 pre strip() 列表
剛剛用open(fileName)來開啟txt格式的檔案,總是出現錯誤,總是找不到檔案讀取的內容,後來才發現是open()在使用過程中自動關閉了。這裡介紹另種方法解決這個問題。
第一種方法。
with open(fileName) as file_object: content=file_object.read()
其實就是將檔案對象儲存給file_object,然後將檔案內容讀取儲存給content,這種方法Python會在程式不需要調用檔案時自動關閉檔案,不需要我們去調用close()來關閉檔案。
當我們過早的調用close()時,需要使用檔案時就會出現檔案無法調用的情況,所以不推薦自己使用open(),close()方式來開啟檔案。
第二種方法。
將檔案內容儲存到列表裡面,這樣就算檔案關閉了,我們直接存取列表裡面儲存的檔案內容就可以了。
with open(fileName) as file_name: lines=file_name.readlines()for line in lines: print(line.rstrip())
用readlines()來將內容儲存到列表裡,並且通過逐行訪問列表內容來獲得檔案內容。
例子:
1 def loadData(fileName): 2 dataMat=[];labelMat=[] 3 fr=open(fileName) 4 dataContent=fr.readlines() 5 #用一個列表把檔案內容裝起來,否則用open開啟檔案後會自動關閉,在後面直接存取fr時檔案已經關閉,擷取不到檔案了, 6 # 也可以用with open (fileName) as fr:這種操作會根據檔案使用方式來自動關閉 7 featNum=len(dataContent[0].strip().split(‘\t‘))-1#資料的屬性數量 8 print(featNum) 9 for line in dataContent:10 lineArr = []11 curLine=line.strip().split(‘\t‘)#對每行資料分割成與屬性數相等的資料12 for i in range(featNum):13 lineArr.append(float(curLine[i]))14 dataMat.append(lineArr)15 labelMat.append(float(curLine[-1]))16 return dataMat,labelMat
如果我們去掉dataContent=fr.readlines()這一行內容,而一直用fr來不斷的調用檔案,會發現無法掉出資料,因為檔案在第一次使用後就關閉了,後面的檔案便無法調用出來。
Python開啟檔案open()的注意事項