我有一个文本文件(固定宽度),格式如下:
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文件并保存每个 Dataframe ,然后过滤 Dataframe 并将其写入.to_string()
文件,这正是我想要的(kind)但是空格的数量不一致。因为它是一个固定宽度的文件,我希望新文件的格式与旧文件完全相同。我也试过用np.savetxt()
写,但它也有空格的问题。遗憾的是,Pandas没有write_fwf
。
所以,也许我可以用普通的Python来代替Pandas来做这件事?或者甚至是一个bash(powershell)脚本?任何有效的东西:)
1条答案
按热度按时间wvyml7n51#
这可能对您有用(GNU sed):
这是一个过滤操作,因此设置
-n
并使用-E
扩展regexp。复制当前标题,并循环遍历数据行,将符合条件的行附加到标题。
在文件末尾或下一个标题处,打印上一个标题和任何行。