如果在行中找到特定字符串(Python/Pandas/Bash),则拆分CSV
我有一个糟糕的CSV文件,里面有多个标题。看起来是这样的:如果在行中找到特定字符串(Python/Pandas/Bash),则拆分CSV,pandas,bash,csv,split,header,Pandas,Bash,Csv,Split,Header,我有一个糟糕的CSV文件,里面有多个标题。看起来是这样的: File1: #HEADER COL1 COL2 data data data #HEADER COL1 COL2 COL3 data data data data data #HEADER COL1 COL2 COL3 COL4 data data ... 由于文件头中的错误,我无法使用pandas加载它,因此我希望将每个
File1:
#HEADER COL1 COL2
data
data
data
#HEADER COL1 COL2 COL3
data
data
data
data
data
#HEADER COL1 COL2 COL3 COL4
data
data
...
由于文件头中的错误,我无法使用pandas加载它,因此我希望将每个头上的数据拆分为一个单独的文件(或pandas中的单独数据帧)。有办法做到这一点吗
此CSV由传感器生成。如果添加了传感器,标题将获得一个新列。这也可能发生在文件头中的。因此,删除这些标题并不是一个解决方案。
()
用python/pandas实现这一点真的很好,但我也很乐意使用bash命令/脚本解决方案
预期产出:
File1:
#HEADER COL1 COL2
data
data
data
File2:
#HEADER COL1 COL2 COL3
data
data
data
data
data
File3:
#HEADER COL1 COL2 COL3 COL4
data
data
...
谢谢大家!
awk
救援
$ awk '/^#HEADER/{close(FILENAME "_" c); c++} {print > (FILENAME "_" c)}' file
将输入的
文件
拆分为文件n
部分,其中n是区段计数器。awk
到rescue
$ awk '/^#HEADER/{close(FILENAME "_" c); c++} {print > (FILENAME "_" c)}' file
将输入的
文件
拆分为文件n
部分,其中n是节计数器。使用方便的csplit
命令(按模式将文件拆分为节):
查看结果:
$ head file[0-9]
==> file0 <==
#HEADER COL1 COL2
data
data
data
==> file1 <==
#HEADER COL1 COL2 COL3
data
data
data
data
data
==> file2 <==
#HEADER COL1 COL2 COL3 COL4
data
data
...
$head文件[0-9]
==>file0 file1 file2使用方便的csplit
命令(按模式将文件拆分为多个部分):
查看结果:
$ head file[0-9]
==> file0 <==
#HEADER COL1 COL2
data
data
data
==> file1 <==
#HEADER COL1 COL2 COL3
data
data
data
data
data
==> file2 <==
#HEADER COL1 COL2 COL3 COL4
data
data
...
$head文件[0-9]
==>文件0文件1文件2您是否能够显示预期的输出以及您尝试过的内容?这些标题行是否总是相同的?你能发布真实的输入吗?不,标题行可以更改(但它们都以“#”)开头。因此,如果我能找到“#”,我就可以拆分文件。您是否能够显示预期的输出以及您尝试过的内容?这些标题
行是否总是相同的?你能发布真实的输入吗?不,标题行可以更改(但它们都以“#”)开头。因此,如果我能找到“#”,我就可以拆分文件。在我的例子中,这非常有效awk'/^#/{close(文件名“”c);c++}{print>(文件名“”c)}文件
最后一个问题:如何将结果文件导出到另一个文件夹?在我的情况下,这非常有效awk'/^#/{close(文件名“”c);c++}{print>(文件名“”c)}”文件
最后一个问题:如何将结果文件导出到另一个文件夹?