我有一个包含大约 3k CSV 文件的目录,其中包含各种数据,我需要在某个时候将这些文件整理到一个文件中,但首先我需要从每个文件中删除所有标题行。
通常为此我会整理文件,然后简单地在 Excel 中打开,并在删除它们之前过滤到标题行。不幸的是,这些总和约为 9M 行,而 Excel 不喜欢这样......
任何人都可以想办法解决这个问题吗?最好是某种批处理脚本,它将遍历目录中的所有文件。
提前致谢,
一个。
我有一个包含大约 3k CSV 文件的目录,其中包含各种数据,我需要在某个时候将这些文件整理到一个文件中,但首先我需要从每个文件中删除所有标题行。
通常为此我会整理文件,然后简单地在 Excel 中打开,并在删除它们之前过滤到标题行。不幸的是,这些总和约为 9M 行,而 Excel 不喜欢这样......
任何人都可以想办法解决这个问题吗?最好是某种批处理脚本,它将遍历目录中的所有文件。
提前致谢,
一个。
以下假设每个文件的第一行是要消除的标题行。
<TAB>
只有在没有文件包含该字符且没有文件太大的情况下,它才能正常工作。我不记得具体细节,但在某些时候,如果输入文件变得太大,带有重定向输出的 MORE 将挂起等待按键。
(for %F in (*.csv) do @more +1 "%F") >concat_csv.txt
我确保给输出文件一个不同的扩展名,这样命令就不会尝试处理输出!另一种方法是将输出重定向到 CSV 文件,但位于不同的文件夹中。
如果您想在批处理文件中使用它,则将百分比加倍(%F
变为%%F
)
我不确定这是否是您要寻找的...这是摆脱 C# 中重复标头的一种方法。代码的主要目的是存储一个标题,string header
并通过跳过第一行 ( while (rdr.Peek() != -1)
) 来读取文件。
我还使用字典来存储每个 csv 文件的行。这将防止包含不同 csv 文件中的重复行(我不确定此功能是否对您的情况有帮助)。
想象一下fname
是一个字符串数组,其中包含您要合并的文件。
Dictionary<string, string> dict = new Dictionary<string, string>();
string destinationFile = <write path of your destination file>;
string dir = <write path of your original directory>
string header = "";
if (dir.Length != 0)
{
foreach (string f in fnames)
{
using (StreamReader rdr = new StreamReader(dir + "\\" + f))
{
header = rdr.ReadLine();
while (rdr.Peek() != -1)
{
string ln = rdr.ReadLine();
string[] split_ln = ln.Split(',');
string value = (split_ln.Length != 2) ? string.Join(",", split_ln.Skip(1)) : split_ln[1];
dict.Add(split_ln[0], value);
}
}
}
using (StreamWriter wr = new StreamWriter(destinationFile))
{
wr.WriteLine(header);
foreach (var pair in dict)
{
wr.WriteLine("{0},{1}", Convert.ToString(pair.Key), pair.Value);
}
}
}