繁体   English   中英

有条件地将一些行从一个文件写入另一个文件

[英]Write some lines conditionally from a file to another file

我有一个具有以下格式的文本文件(固定宽度):

a1   b   c1    d     -> header
1    2    3    4
6    4    3    5
a2   b    c2   d2    -> header
7    9    1    4
a    b1   c6   d2    -> header
8    9    3    4

从这个文件中,我想创建另一个包含过滤行的文件。 如果带有c的列的值为 3 且b列的值不为 2,那么我希望该行包含标题。 如果列c没有值 3 那么我不想要任何行,包括它的标题。 因此,新文件必须如下所示:

a1   b   c1    d
6    4    3    5
a    b1   c6   d2
8    9    3    4

此外,值 3 只能出现在带有c的列中,而 2 只能出现在带有b的列中。 所以,我们甚至不用去查列,只要连续满足过滤条件即可。 唯一重要的是,如果满足条件,我还需要该行的标题。 如果没有,我也不想要标题。

怎样才能做到这一点?

我尝试过的是使用.read_fwf()读取 pandas 中的文件并保存每个数据帧。 之后,我过滤数据框并使用.to_string()将它们写入文件。 这正是我想要的(有点),但空格的数量不一致。 因为它是一个固定宽度的文件,所以我希望新文件的格式与旧文件完全相同。 我也尝试用np.savetxt()编写,但它也有空格问题。 遗憾的是,熊猫没有write_fwf

那么,也许我可以使用普通的 python 来代替 pandas 来做到这一点? 甚至是 bash(powershell) 脚本? 任何有用的东西:)

这可能对你有用(GNU sed):

sed -nE ':a;/^a/{h;:b;n;/^\S+ +[^2 ]+ +3 /H;$bc;/^a/{:c;x;/\n/p;x;ba};bb}' file

这是一个过滤操作,因此设置-n并使用-E扩展正则表达式。

制作当前标题的副本并循环遍历数据行,将满足条件的行附加到它。

在文件末尾或下一个标题处,打印前一个标题和任何行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM