Python打開文件open()的注意事項


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM