【发布时间】:2020-11-12 05:41:19
【问题描述】:
目前我下面的代码调用 JsonToCsv() 来解析 JSON 文件并相应地附加到 csv,所以结果是这样的:
结果.csv
File Name Page Practice Name
file1.json 1 Associates & Co
但是,如您所见,我正在使用 for 循环来迭代一堆 JSON 文件,我的目的是解析它们并将它们附加到 csv 中。所以如果我有 3 个 json 文件,预期的 csv 文件应该是这样的:
File Name Page Practice Name
fileXYZ.json 1 XYZ & Co
fileAB2.json 1 ABC & Co
file1.json 1 Associates & Co
但是,发生的事情是 csv 文件被覆盖,我只看到 csv 文件中最后一个文件的结果。如何让它附加到同一个文件?
static void Main(string[] args)
{
//Output to CSV
foreach (var jsonFile in Directory.GetFiles(jsonFilesPath))
{
JsonToCsv(jsonFile, csvFilePath);
}
}
public static void JsonToCsv(string jsonInputFile, string csvFile)
{
using (var p = new ChoJSONReader(jsonInputFile).WithJSONPath("$..readResults"))
{
using (var w = new ChoCSVWriter(csvFile)//.WithFirstLineHeader())
.WithField("FileName", fieldName: "File Name")
.WithField("Page")
.WithField("PracticeName", fieldName: "Practice Name")
.WithFirstLineHeader()
)
{
// Limit the result to page 1 since the fields below only exist on the 1st page
w.Write(p
.Where(r1 => r1.page == 1)
.Select(r1 =>
{
var lines = (dynamic[])r1.lines;
return new
{
FileName = inputFile,
Page = r1.page,
PracticeName = lines[6].text,
};
}
));
}
}
}
【问题讨论】:
-
@DCCoder 不一样。他的场景更复杂,用例也不同。他也没有在循环中使用函数。最后我确实考虑了 AppendAllText。但是,这适用于 IO 流,但我使用的是 choetl,它知道它的等价物是什么,即使这是解决方案......
-
所以 AppendAllText 和使用 FileStream 追加不适合您的需求? (这两个都包含在该问题的答案中)。你能解释一下为什么你不能使用这两种方法吗?
-
@DCCoder 哦,我现在明白了如何用 Yegor 的回答来做到这一点。
FileMode.Append.