gpt4 book ai didi

java - 解析 TSV(文本)文件并从列中获取值

转载 作者:行者123 更新时间:2023-11-30 07:24:08 25 4
gpt4 key购买 nike

我的文件夹中有一堆 TSV 文件,我正在尝试解析它们并获取一些信息。每个文件都有不同的列(具有不同的标题),但其中一列在所有文件中肯定是通用的。我在文本文件中有一个我感兴趣的标题列表。我正在解析该文件并尝试使用 uniVocity 解析工具来获取这些特定列的信息。当我尝试使用一两个 header 时它有效,但当文件中的所有 header 都通过时它不返回任何内容。

这是我的代码:

import com.univocity.parsers.tsv.TsvParser;
import com.univocity.parsers.tsv.TsvParserSettings;

import java.io.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static com.univocity.parsers.conversions.Conversions.toLowerCase;


public class getdata {
public static void main(String argv[]) throws IOException {

String filename = "tmp_collist.txt";

BufferedReader reader = new BufferedReader(new FileReader(filename));
Set<String> lines = new HashSet<String>(10000);
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
String str = lines.toString().replaceFirst("\\[", "");
StringBuilder _sb = new StringBuilder(str);
//str = '"' + _sb;
str = _sb.insert(0, '"').toString();
if (str != null && str.length() > 0 && str.charAt(str.length() - 1) == ']') {
str = str.substring(0, str.length() - 1);
}
str += '"';
str = str.replace(", ", "\",\"");
//System.out.print(str);
//reader.close();
File folder = new File("folder_location");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
File file1 = listOfFiles[i];
if (file1.isFile() && file1.getName().endsWith(".txt")) {
TsvParserSettings settings = new TsvParserSettings();
settings.getFormat().setLineSeparator("\n");
settings.selectFields(str);
TsvParser parser = new TsvParser(settings);
List<String[]> resolvedData = parser.parseAll(new FileReader(file1));
for (String[] row : resolvedData) {
StringBuilder strBuilder = new StringBuilder();
for (String col : row) {
strBuilder.append(col).append("\t");
}
}
}
}
}
}

TSV 文件如下:

sample_file1.txt

header1 header2 header3
val11 val21 val31
val12 val22 val32

sample_file2.txt

header1 header5 header3
val11 val51 val35
val14 val54 val38

tmp_collist.txt 有我需要的标题列表。这是一个只有一列的文件:

header2
header3
header9
header8

我想获取所有 header1 值的列表(如果可能的话,唯一的),对于提供的 header 中的每个值(可以在文件或任何内容中)。

最佳答案

我是该库的作者,刚刚发现当 header 名称不匹配时字段选择存在问题(请参阅 here )。

尝试获取最新版本(2.1.1-SNAPSHOT),当您选择输入文件中不存在的 header 时,您将获得预期结果。

希望这有帮助。

关于java - 解析 TSV(文本)文件并从列中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37040584/

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