我正试图用C#语言逐行写入一个csv
文件。这是我的功能
string first = reader[0].ToString();
string second=image.ToString();
string csv = string.Format("{0},{1}\n", first, second);
File.WriteAllText(filePath, csv);
整个函数在一个循环中运行,每一行都应该写入csv
文件。在我的例子中,下一行覆盖现有行,最后,我在csv文件中只得到一条记录,这是最后一条。如何写入csv
文件中的所有行?
手工编写csv文件可能很困难,因为您的数据可能包含逗号和换行符。我建议你改用现有的图书馆。
这个问题提到了几个选项。
C#中是否有任何CSV阅读器/编写器库?
我强烈建议你走更乏味的路线。尤其是当你的文件很大的时候。
using(var w = new StreamWriter(path))
{
for( /* your loop */)
{
var first = yourFnToGetFirst();
var second = yourFnToGetSecond();
var line = string.Format("{0},{1}", first, second);
w.WriteLine(line);
w.Flush();
}
}
文件。AppendAllText()
打开一个新文件,写入内容,然后关闭文件。打开文件比将数据写入开放流要耗费大量资源。在循环中打开/关闭文件会导致性能下降。
Johan建议的方法通过将所有输出存储在内存中,然后写入一次来解决这个问题。然而(在大文件的情况下),你的程序将消耗大量的内存,甚至崩溃与OutOfMemoryExc0019
我的解决方案的另一个优点是,可以通过在输入数据中保存当前位置来实现暂停\恢复。
upd。放在正确的地方
使现代化
在我还很幼稚的时候,我建议手动操作(这是一个简单问题的简单解决方案),但是由于这种方法越来越流行,我建议使用库CsvHelper来进行所有安全检查,等等。
CSV比问题/答案暗示的要复杂得多。
原始答案
因为你已经有了一个循环,考虑这样做:
//before your loop
var csv = new StringBuilder();
//in your loop
var first = reader[0].ToString();
var second = image.ToString();
//Suggestion made by KyleMit
var newLine = string.Format("{0},{1}", first, second);
csv.AppendLine(newLine);
//after your loop
File.WriteAllText(filePath, csv.ToString());
或者类似的东西。我的理由是:您不需要为每个项目都写入文件,只需打开流一次,然后再写入。
你可以替换
File.WriteAllText(filePath, csv.ToString());
具有
File.AppendAllText(filePath, csv.ToString());
如果要将以前版本的csv保留在同一个文件中
C#6
如果您使用的是c#6.0,那么您可以执行以下操作
var newLine = $"{first},{second}"
编辑
下面是一个问题的链接,该问题解释了什么是环境。新行是这样的。
我在pandas中有一个数据帧,我想把它写到CSV文件中。我使用的是: 并得到错误: 有没有什么方法可以很容易地解决这个问题(例如,我的数据帧中有unicode字符)?还有,有没有一种方法可以使用“to-tab”方法(我认为不存在)写入以制表符分隔的文件,而不是CSV?
我正在使用Spark 2.3,我需要将Spark数据帧保存到csv文件中,我正在寻找更好的方法。。查看相关/类似的问题,我发现了这个问题,但我需要一个更具体的: 如果DataFrame太大,如何避免使用Pandas?因为我使用了函数(下面的代码),它产生了: 内存不足错误(无法分配内存)。 使用文件I/O直接写入csv是更好的方法吗?它可以保留分隔符吗? 使用df。聚结(1)。写选项(“标题”、“
我正在尝试将以下数据写入csv文件。这些数据是employdetails name1-surname1-place1 名称4-surname4-place4 我希望输出在CSV文件上,一个在另一个下面,在单独的行上。 我写了下面的代码 -KD
问题内容: 嗨,我正在尝试使用python将csv文件写入SQL Server数据库中的表中。传递参数时遇到错误,但是手动进行操作时不会遇到任何错误。这是我正在执行的代码。 错误:pyodbc.DataError :(“ 22001”,“ [22001] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]字符串或二进制数据将被截断。(8152)(SQLEx
本文向大家介绍Python将列表数据写入文件(txt, csv,excel),包括了Python将列表数据写入文件(txt, csv,excel)的使用技巧和注意事项,需要的朋友参考一下 写入txt文件 写入csv文件 写入excel文件 以上所述是小编给大家介绍的Python将列表数据写入文件(txt, csv,excel)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回
我在文本文件中插入的代码如下: 我想将所有这些数据插入到csv文件中,但我尝试了以下方法: 如何将此数据逐行插入到带有列标题的csv文件中?