gpt4 book ai didi

Java CSVReader 跳过行以及如何转换 csv

转载 作者:行者123 更新时间:2023-11-29 04:36:42 24 4
gpt4 key购买 nike

我一直在研究一整天。无论我如何编码,结果都不是我想要的。

首先,我正在处理大数据,因此,我认为保持复制和粘贴行条目效率不高。我正在读取一个 CSV 文件,它正在运行,它正在删除我告诉它要删除的所有内容。到目前为止一切都很好。现在,唯一出错的是(我认为)Eclipse (Java) 从 csv 文件中删除了标题/列名。如何解决这个问题?

package data;

import java.io.FileReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

import com.opencsv.CSVReader;

public class BelgiumParser {

public static void main(String[] args) {
// TODO Auto-generated method stub

//List<String> listBelgium;
String fileName = "src\\data\\Belgium.csv";


try{
List<String> listBelgium = Files.readAllLines(Paths.get(fileName));

//CSVReader reader = new CSVReader(new FileReader("src\\data\\Belgium.csv"), ',', '"', 1);

for(String line : listBelgium){

line = line.replace("\"" , "");
line = line.replaceAll("T", " ");
line = line.replaceAll("Z", "");

System.out.println(line);

}}catch(Exception e){
//System.out.println(e.getMessage());
e.printStackTrace();

}
}

还尝试了 while 循环:

while(line = bufferedReader.readLine()) != null){...}

是的,我尝试了 bufferedReader 和 CSVReader。我什至可能已经找到了解决这个问题的 Python 解决方案?

headers = next(reader, None)  # returns the headers or `None` if the input is empty

if headers:
writer.writerow(headers)

不是我的代码,不知道如何链接。主要问题:

  • 我怎样才能不仅确保标题被打印出来(有效的方法,我不想复制/粘贴一段代码)?
  • 而且,我怎样才能让读者也垂直写入一些标题(转换)?

更新: enter image description here

包含数百行数据:-没有测量等于空-测量值等于整数或 double (?) enter image description here

应该发生的是:- 在时间里,T 和 Z 必须离开。- T 应该是一个空格:"",而 Z 只是 ""- B 列及更高列,第 1 行,应仅包含植物名称本身。

最终,应该能够以清晰的格式将所有这些都放在 MySQL 数据库中,以便可以在 Java Server Faces(类?)中使用 D3.js 折线图来实现

最佳答案

如果您正在处理大数据,那么我建议您获取 univocity-parsers因为它比其他任何东西都快得多。然后尽量不要加载内存中的所有行,因为这是一个明显的问题,而是流式传输它们。这是一个帮助您入门的简单示例:

CsvParserSettings settings = new CsvParserSettings();
settings.detectFormatAutomatically(); //you can configure the format manually if you prefer.
parserSettings.setHeaderExtractionEnabled(true); //you want to get the headers from the input
settings.selectFields("a", "b", "c"); //select just the columns you need.

CsvParser parser = new CsvParser(settings);

File input = Paths.get(fileName).toFile();
parser.beginParsing(input, "UTF-8");

String[] row;
while ((row = parser.parseNext()) != null) {
//do your stuff here.

//here are your headers
String[] headers = parser.getContext().parsedHeaders();
}

你的第二个问题,如果我理解正确的话,是你想转置行,即将列的所有数据与标题相关联。

为此,使用 ColumnProcessor(这会将所有数据加载到内存中,稍后我将向您展示替代方案):

ColumnProcessor columnProcessor = new ColumnProcessor();
parserSettings.setProcessor(columnProcessor);

CsvParser parser = new CsvParser(parserSettings);
parser.parse(input, "UTF-8"); //all rows are submitted to the processor created above.

//At the end of the process, you can get your data like this:
Map<String, List<String>> columnValues = new TreeMap<String, List<String>>(columnProcessor.getColumnValuesAsMapOfNames());

如果您的数据太多,则需要分批进行转置操作。为此使用 BatchedColumnProcessor:

BatchedColumnProcessor columnProcessor = new BatchedColumnProcessor(20000 /*runs batches of 20000 rows each*/) {
@Override
public void batchProcessed(int rowsInThisBatch) {
Map<Integer, List<String>> columnsByIndex = getColumnValuesAsMapOfIndexes();

//process your batch here
}
};

这应该可以完美运行。希望对您有所帮助。

免责声明:我是这个库的作者,它是开源和免费的(Apache V2.0 许可证)

关于Java CSVReader 跳过行以及如何转换 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41123797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com