【Python-資料讀取】讀取txt檔案每一行資料生成列表
阿新 • • 發佈:2018-11-11
好多時候我們要讀取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這一步,則讀出的均為字串: