[英]How to read a csv and create a list of maps out of each line?
我有一個 Java 類來自動化網絡上的某些行為,我唯一的問題是現在我需要使用來自 csv 的數據而不是靜態數據。
例如:
這是我的自動化課程中的操作之一:
WebElement supplierAddressField = driver.findElement(By.id("FieldaddressOfSupplierLine"));
supplierAddressField.sendKeys("hollywood blvd 34");
所以現在,我想迭代.sendKeys(csvLineMap.get("supplier address"));
每一行,而不是靜態的“供應商地址”值.sendKeys(csvLineMap.get("supplier address"));
因為在每一行中我不需要所有的標題信息,這就是為什么我認為最好只創建一個地圖列表,每個地圖鍵將是 csv 的標題,而值將是這個值特定行中的標題。
這是csv的結構:
請幫我解決這個問題……謝謝!!
對於您的要求,我建議您查看Apache Commons CSV 。 他們的 用戶指南中的示例之一與您正在嘗試的示例非常匹配
Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
for (CSVRecord record : records) {
String lastName = record.get("Last Name");
String firstName = record.get("First Name");
}
好的,這對於您想要的東西來說可能過於復雜,但我總是將 csv 文件作為 excel 文件打開,因為這樣您就可以向下運行這些列。 獲取任何列的代碼如下所示:
Workbook w = Workbook.getWorkbook(inputWorkbook);
Sheet sheet = w.getSheet(0);
nom = sheet.getRows();
String[][] SheetArray = new String [2][nom];
// change the first number to the number of columns you want,
// or pick up the number same as you did with rows
Cell cell;
// GETS DATA FROM SHEET AND RUNS THROUGH WHOLE LOOP BELOW FOR EACH REFERENCE
for(int j =0;j<sheet.getRows();j++) // cycles through rows and loads into 2d array
{ // start 6
cell = sheet.getCell(0, j); <- your column number here
cellcont = cell.getContents();
SheetArray[0][j] = cellcont;
// repeat the above block for each column you want
} // end 6
您現在擁有一個包含所有信息的二維數組,您可以根據需要進行處理。
將整個事情包裹在 try .. catch 中。
使用uniVocity-parsers,您可以僅以任何順序解析您感興趣的字段:
CsvParserSettings parserSettings = new CsvParserSettings();
// Let's extract headers
parserSettings.setHeaderExtractionEnabled(true);
parserSettings.selectFields("Field 5", "Field 1");
//Rows will come organized according to your field selection
List<String[]> allRows = parser.parseAll("path/to/file.csv");
如果您願意,您可以輕松獲得包含所有列值的映射:
CsvParserSettings parserSettings = new CsvParserSettings();
// Let's extract headers
parserSettings.setHeaderExtractionEnabled(true);
// To get the values of all columns, use a column processor
ColumnProcessor rowProcessor = new ColumnProcessor();
parserSettings.setRowProcessor(rowProcessor);
CsvParser parser = new CsvParser(parserSettings);
//This will kick in our column processor
parser.parse(new FileReader("path/to/file.csv"));
//Finally, we can get the column values:
Map<String, List<String>> columnValues = rowProcessor.getColumnValuesAsMapOfNames();
看一看。 它比任何其他解析器都快,您可以做更多的事情,例如轉換值和生成 java bean。
披露:我是這個圖書館的作者。 它是開源且免費的(Apache V2.0 許可)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.