1. 程式人生 > >【Python-資料讀取】讀取txt檔案每一行資料生成列表

【Python-資料讀取】讀取txt檔案每一行資料生成列表

好多時候我們要讀取txt檔案獲得資料,並把資料的按行或者按列存放到列表中,從而生成特徵和類別標籤。今天讀了好幾個都沒有成功,最後發現,資料間的分隔符十分重要,總結一下經驗。

資料間的分隔符是空格

在這裡插入圖片描述
讀取的程式碼如下所示:

file=open('ll.txt')    
dataMat=[]  
labelMat=[]
for line in file.readlines():    
    curLine=line.strip().split(" ")    
    floatLine=map(float,curLine)#這裡使用的是map函式直接把資料轉化成為float型別    
    dataMat.append(floatLine[0:2]) 
    labelMat.append(floatLine[-1])
print 'dataMat:',dataMat
print 'labelMat:',labelMat
print np.shape(dataMat)

在這裡插入圖片描述
可以看到,讀出的資料dataMat 是一個由每行前兩列組成的二維陣列,labelMat 是由每行的最後一列組成的列表

注意:

  • 看到程式裡讀取每一行的時候,會有line.strip().split(“ ”),這裡,strip() 是為了刪除開始和結尾的空格符(僅限頭和尾處);
  • 後面的split(" ") 就很重要了,它是劃分這一行裡的每個元素,括號裡“ ”表示的是以空格作為分割符,來分割這一行的元素(不是行與行之間的分割);
  • 這裡元素之間只有一個空格,如果是多個空格,則無法讀取,因為空格也會成為元素,且空格無法轉換成浮點型(錯誤如下):ValueError: could not convert string to float:

資料間分隔符是製表符 \t

這類檔案類似於從excel中複製生成的,每個資料元素的間隔是製表符 \t ,下圖中資料就是從excel中複製而來的:
在這裡插入圖片描述
讀取的程式碼如下:

file=open('ll.txt')    
dataMat=[]  
labelMat=[]
for line in file.readlines():    
    curLine=line.strip().split("\t")    
    floatLine=map(float,curLine)#這裡使用的是map函式直接把資料轉化成為float型別    
    dataMat.append(floatLine[0:2]) 
    labelMat.append(floatLine[-1])
print 'dataMat:',dataMat
print 'labelMat:',labelMat
print np.shape(dataMat)
print np.array(dataMat)

在這裡插入圖片描述

注意:
與空各類的間隔符相比,這裡只是strip(“ ”)一項有改動:strip("\t"),也就是以製表符作為每一行內元素的分割標誌。如果仍用 strip(“ ”) ,會出現如下錯誤:ValueError: invalid literal for float(): 1 255 547
因為行內沒有空格,所以讀取了整行為一個元素:1,\t,255,\t547所以錯誤顯示無法轉換為浮點型

千萬不要忘記 map(float, line),如果沒有轉換成float這一步,則讀出的均為字串:
在這裡插入圖片描述