使用HashMap中的列和值创建CSV文件

ManxDev:

小心一点,这是我第一次使用Apache Commons CSV 1.7。

我正在创建一个服务来处理一些CSV输入,从外部来源添加一些其他信息,然后将该CSV写出以便提取到另一个系统中。

我将收集的信息存储到HashMap<String, String>最终输出csv的每一行的列表中Hashmap包含<ColumnName, Value for column>

我在使用CSVPrinter正确地将HashMaps的值分配到行中时遇到问题。我可以将值连接成一个字符串,变量之间用逗号隔开;但是,这只是将整个字符串插入第一列。

我无法定义或硬编码标题,因为它们是从配置文件中获取的,并且可能会根据使用服务的项目而有所变化。

这是我的一些代码:

try (BufferedWriter writer = Files.newBufferedWriter(
    Paths.get(OUTPUT + "/" + project + "/" + project + ".csv"));)
{
    CSVPrinter csvPrinter = new CSVPrinter(writer,
        CSVFormat.RFC4180.withFirstRecordAsHeader());
    csvPrinter.printRecord(columnList);

for (HashMap<String, String> row : rowCollection)
{
    //Need to map __record__ to column -> row.key, value -> row.value for whole map.

    csvPrinter.printrecord(__record__);
}

csvPrinter.flush();

}

谢谢你的协助。

DwB:

实际上,您对技术有多种关注;

  1. 您如何维护列顺序?
  2. 您如何打印列名?
  3. 如何打印列值?

这是我的建议。

  1. 保持列顺序。不要使用HashMap,因为它是无序的。而是使用LinkedHashMap具有“可预测的迭代顺序”(即保持顺序)的。

  2. 打印列名。列表中的每一行都包含键值形式的列名,但是您仅将列名打印为输出的第一行。解决方案是在循环浏览行之前打印列名称。从列表的第一个元素中获取它们。

  3. 打印列值。“ Billal GHILAS”答案演示了一种打印每行值的方法。

这是一些代码:

try (BufferedWriter writer = Files.newBufferedWriter(
     Paths.get(OUTPUT + "/" + project + "/" + project + ".csv"));)
{
    CSVPrinter csvPrinter = new CSVPrinter(writer,
        CSVFormat.RFC4180.withFirstRecordAsHeader());

    // This assumes that the rowCollection will never be empty.
    // An anonymous scope block just to limit the scope of the variable names.
    {
        HashMap<String, String> firstRow = rowCollection.get(0);
        int valueIndex = 0;
        String[] valueArray = new String[firstRow.size()];

        for (String currentValue : firstRow.values())
        {
            valueArray[valueIndex++] = currentValue;
        }

        csvPrinter.printrecord(valueArray);
    }

    for (HashMap<String, String> row : rowCollection)
    {
        int valueIndex = 0;
        String[] valueArray = new String[row.size()];

        for (String currentValue : row.values())
        {
            valueArray[valueIndex++] = currentValue;
        }

        csvPrinter.printrecord(valueArray);
    }

    csvPrinter.flush();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从.log文件在.csv文件中创建行和列

如何使用Pandas在CSV文件中创建新列,并根据这些列中的值添加数据

如何使用bash脚本命令替换csv文件中的列标题和值?

使用Python列表中的值创建.csv文件

使用其他csv文件中的数据在csv文件中创建新列

在Python中使用X和Y值从两个CSV文件创建单个CSV

使用python更改CSV文件中的列的值

使用Python拆分CSV文件中的列的值

如何使用python在csv文件中查找相同值的列

如何使用python将csv和列中的值求和

使用 csv 的特定行和列值替换文本文件中的几个字符

在csv文件中创建一个重复的行以分隔列中的多个值(python)

针对python中的csv文件中的现有字符串创建值的新列

Python:根据CSV文件中的不同列创建新列和行

如何使用awk或其他方式在csv文件中的2个不同y值的共享x值数量中包含列a和b?

更改CSV文件列中的值

计算.csv文件Java列中的值

仅使用列中的最大值和行中的相应值创建表/数据框

使用 Python 更新 csv 文件的列值

使用'for'或'if'条件在Python中创建CSV文件

为CSV文件的名称和值列表创建Dict

使用nodejs中的fast-csv根据列值将csv文件拆分为多个csv文件

使用AWK将带有值的新列添加到csv文件中,而无需在行之间创建空的新行

如何使用python将列从CSV文件转换为json,以便键和值对来自CSV的不同列?

Powershell - 根据列对 CSV 文件中的唯一值进行分组和计数

根据 R 中的不同值和列组合编写不同的 .csv 文件

根据 Pandas df 列值创建许多 CSV 文件

如何遍历 hashmap<String ArrayList<String>> 并使用键 String 和 arraylist 中的节点创建 xml 文件名

使用C从数组中读取和存储csv文件中的值