[英]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.