2016-03-04 201 views
0

我是新來編寫java代碼。我有經驗在腳本類型語言中編寫代碼。我試圖重寫一段代碼,我在python中使用了java。Java讀取csv文件作爲矩陣

的Python代碼如下 -

import pandas as pd 
myFile = 'dataFile' 
df = pd.DataFrame(pd.read_csv(myFile,skiprows=0)) 
inData = df.as_matrix() 

我正在尋找在Java的方法,它等效於蟒蛇as_matrix。該功能將數據幀轉換爲矩陣。

我曾經查找過一段時間,但無法找到像python這樣的轉換方法。是否有第三方庫或我可以使用的線?任何方向都會幫助我很多。謝謝你堆。

+0

你到目前爲止嘗試過什麼? [Files.readAllLines](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#readAllLines%28java.nio.file.Path,%20java.nio.charset .Charset%29)可能有所幫助...也檢查這個問題http://stackoverflow.com/questions/4716503/reading-a-plain-text-file-in-java –

+1

你可以隨時自己寫方法,它wouldn花費太多時間。這是一個簡單的程序,打開csv文件,逐行閱讀並使用String.split()方法添加到矩陣中。如果你想要類似的東西,我可以詳細闡述答案。 –

+0

我想你想讀取一個CSV文件,你可以使用OpenCSV進行此操作,它可以直接將你的輸入轉換成bean。 – Bhavesh

回答

1

你想要做的事情很簡單,只需要最少的代碼,因此我建議你自己編寫代碼。下面是一個示例實現:

List<String[]> rowList = new ArrayList<String[]>(); 
try (BufferedReader br = new BufferedReader(new FileReader("pathtocsvfile.csv"))) { 
    String line; 
    while ((line = br.readLine()) != null) { 
     String[] lineItems = line.split(","); 
     rowList.add(lineItems); 
    } 
    br.close(); 
} 
catch(Exception e){ 
    // Handle any I/O problems 
} 
String[][] matrix = new String[rowList.size()][]; 
for (int i = 0; i < rowList.size(); i++) { 
    String[] row = rowList.get(i); 
    matrix[i] = row; 
} 

這樣做什麼是非常簡單的:它打開一個緩衝的讀者,將逐行讀取CSV文件中的行,並根據逗號分割他們之後的內容粘貼到字符串數組(這是你的分隔符)。然後它會將它們添加到數組列表中。我知道這可能並不完美,所以之後我將這些列表中的內容變成一個整齊的2D矩陣。希望這可以幫助。

提示:可以對這段小小的代碼進行很多改進(即照顧尾隨和前導空格,添加用戶定義的分隔符等),但這應該是一個很好的起點。

+0

你好 - 我會試試這個。這次csv文件有16列,行可以有多少次。另外,輸入文件中的列可能會不時變化。有沒有一種通用的方式來做到這一點,而不是將其轉換爲二維數組? – usert4jju7

+0

@ usert4jju7你是什麼意思的通用方式?這可能是最通用的。矩陣是根據數據的大小動態創建的,所有數據都以字符串的形式保存起來(您可以稍後操作並解析爲整數,雙精度等)。 –

+0

沒錯。都好。謝謝你堆 – usert4jju7