如何使用 Java 中的某些解析器在低内存中解析 csv?
How can I parse a csv in low memory, using some parser in Java?
我使用了 InputStream,在解析时,如果一列中有一个 ","
,那么它会将其视为一个单独的列。
前 - abc, xyz, "m,n"
那么解析后的输出是 abc , xyz, m, n
这里 m 和 n 被视为单独的列。
我真的很喜欢 Apache Commons CSVParser。这几乎是他们的用户指南中的逐字记录:
Reader reader = new FileReader("input.csv");
final CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT);
try {
for (final CSVRecord record : parser) {
final String string = record.get("SomeColumn");
...
}
} finally {
parser.close();
reader.close();
}
这很简单,可配置且面向行。
您可以这样配置:
final CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT.withHeader().withDelimiter(';'));
郑重声明,此配置是不必要的,因为 CSVFormat.DEFAULT
完全按照您希望的方式工作。
这将是我第一次尝试查看它是否适合内存。如果没有,您能否更具体地说明低内存占用量?
像这样的第三方csv解析库有很多
我正在使用 UniVocity csv 解析器,它速度非常快,可以自动检测行中的分隔符。您可以浏览上面给出的 csv 库。
我使用了 InputStream,在解析时,如果一列中有一个 ","
,那么它会将其视为一个单独的列。
前 - abc, xyz, "m,n"
那么解析后的输出是 abc , xyz, m, n
这里 m 和 n 被视为单独的列。
我真的很喜欢 Apache Commons CSVParser。这几乎是他们的用户指南中的逐字记录:
Reader reader = new FileReader("input.csv");
final CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT);
try {
for (final CSVRecord record : parser) {
final String string = record.get("SomeColumn");
...
}
} finally {
parser.close();
reader.close();
}
这很简单,可配置且面向行。
您可以这样配置:
final CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT.withHeader().withDelimiter(';'));
郑重声明,此配置是不必要的,因为 CSVFormat.DEFAULT
完全按照您希望的方式工作。
这将是我第一次尝试查看它是否适合内存。如果没有,您能否更具体地说明低内存占用量?
像这样的第三方csv解析库有很多
我正在使用 UniVocity csv 解析器,它速度非常快,可以自动检测行中的分隔符。您可以浏览上面给出的 csv 库。