剛剛用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來不斷的調用文件,會發現無法掉出數據,因為文件在第一次使用后就關閉了,后面的文件便無法調用出來。