我正在使用apache commons csv来读取我从google trends下载的CSV文件中的内容,该文件是在相关查询部分右下角的csv下载的。该文件的一小部分:
Category: All categories
"bluetooth speakers: (1/1/04 - 8/15/16, Worldwide)"
TOP
speaker,100
bluetooth speaker,100
RISING
portable speakers bluetooth,Breakout
portable speakers,Breakout
我要从文件中读取的代码:
private void readCsv(String inputFilePath) {
try {
Reader in = new FileReader(inputFilePath);
Iterable<CSVRecord> records = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in);
for (CSVRecord record : records) {
String topic = record.get(0);
if (topic != null && !topic.isEmpty()) {
System.out.println(topic);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
输出:
bluetooth speakers: (1/1/04 - 8/15/16, Worldwide)
TOP
speaker
bluetooth speaker
RISING
portable speakers bluetooth
portable speakers
期望的输出:
speaker
bluetooth speaker
portable speakers bluetooth
portable speakers
根据谷歌(没有标题)和两个标题 TOP 和 RISING 的数据,我无法提取所需的值。是否有任何过滤配置我可以申请获得所需的值?
答案 0 :(得分:0)
虽然严格来说不是一个好的解决方案,但对于我的情况,忽略具有单个元素的记录会消除标题。我仍在寻找/处理类似配置的解决方案或扩展一些类以获得更清洁的解决方案。
private void readCsv(String inputFilePath) {
try {
Reader in = new FileReader(inputFilePath);
// Iterable<CSVRecord> records = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in);
Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(in);
for (CSVRecord record : records) {
if (record.size() <= 1){
continue;
}
String topic = record.get(0);
if (topic != null && !topic.isEmpty()) {
System.out.println(topic);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
这不是一个好的解决方案的原因是因为可能有许多其他csv文件,这个解决方案可能会证明有问题。仍然可能对某人有用。