结合 .csv 并将文件名添加为列

Posted

技术标签:

【中文标题】结合 .csv 并将文件名添加为列【英文标题】:Combining .csv and adding filename as column 【发布时间】:2019-03-25 16:18:19 【问题描述】:

这是我的担忧。我有一个包含多个 .csv 文件的文件夹,我想将它们组合/合并到一个 csv 文件中,但我需要将每个 csv 的文件名添加为 .csv 本身的一列,这样我就可以知道哪个条目来自合并文件中的哪个 csv 文件。我没有编码经验,但是我在网上找到了一些应该这样做的解决方案。

最简洁的是这条 CMD 行:

for /f %a in ('dir /b *.csv') do for /f "tokens=*" %b in (%a) do echo %b,%a >> all.csv

我基本上在 CMD 中导航到我的 csv 文件夹,然后输入这一行并执行,但根本没有输出。所以,我不知道我做错了什么。

奇怪的是,当我在另一个包含 csv 文件的文件夹中执行它时,它适用于另一个 csv 文件。该文件与其他 csv 文件之间的唯一区别是其他文件(它不起作用)是从 Internet 下载的,而这个是我创建的。

谁能帮忙?

更新:刚刚检查过,当我重命名文件时它可以工作吗?

【问题讨论】:

每个 .csv 文件的第一行是否包含字段名称? 【参考方案1】:

我试图重现您的情况...据我所知,您的命令运行良好。这是我尝试过的(在 Windows 上):

我创建了一个新文件夹。 我在该文件夹中创建了 3 个 csv 文件(“file1.csv”、“file2.csv”和“file3.csv”) 我在 3 个 csv 文件中的每一个中创建了一条记录(包含 3 个字段),其中一条典型记录可能类似于“100、101、102” 我打开了命令提示符,导航到包含这些 csv 文件的文件夹,并按原样执行了您的命令。 该命令处理了 3 个 csv 文件,并创建了一个名为“all.csv”的新文件。 “all.csv”中的每条记录似乎都是正确的:存在三个数据字段,并且存在第四个字段,其中包含源 csv 文件的名称(例如,“file1.csv”)。

您提到它在对从 Internet 下载的文件执行时不起作用。您能否提供有关这些文件的更多详细信息?

【讨论】:

嘿,我刚刚意识到,在我打开每个文件并再次保存在同一个文件夹中后,使用相同的名称,没有更改,一切都一样。 Excel 只会提示我一次“您确定要以这种格式保存一些数据可能会丢失”等...您单击“是”并保存它。然后,当我运行命令时,它会拾取该文件。即使它以前也是 csv,但将其保存为 csv 就可以了。所以它肯定与 csv 文件本身有关,尤其是与格式有关。【参考方案2】:

您需要将每个 csv 的文件名添加为 .csv 本身的一列吗?

在合并该文件夹中的文件之前,您需要根据该文件上的列数在每个 .csv 文件的第一行中创建一个逗号分隔的行,其中包含您的文件名。

【讨论】:

以上是关于结合 .csv 并将文件名添加为列的主要内容,如果未能解决你的问题,请参考以下文章

从子目录中搜索 CSV 并将文件夹名称添加为列

从 csv 文件读取时,熊猫会添加列

解析嵌套的 json 并将其保存在 csv 中

读取多个 csv 文件并将文件名添加为 pandas 中的新列

创建 CSV 并合并 2 行并将值设置为 codeigniter 中的标题

python/pandas:需要帮助为列添加双引号