如何在pandas中从文件中检索页脚

r55awzrz  于 2023-03-21  发布在  其他
关注(0)|答案(2)|浏览(91)

我有一些文件可以包含或不包含一行作为页脚。如果存在,我想检索它,因为它包含有关文件的 meta信息。pandas中是否有任何构建函数来检索该行?,然后我可以将其存储在变量中。我期望这样的东西:
df = pd.read_csv("path", skipfooter=1, engine"python")
但它并没有跳过这一行,而是将其存储在一个变量中。
这就是柱子的样子。

  • col1、col2、col3
  • 100,“向上”,1.24
  • 874,“下跌”,3.54
  • 122,“向上”,3.34
  • 日期:20200225,开始:1200,结束:1300,会话:2,失效日期:12,类型:“mono”

这是我目前正在使用的
def getFooter(): with open (path, "r") as f: footer = f.readlines()[-1] return footer

aurhwmvo

aurhwmvo1#

看起来你需要知道页脚的模式是什么,然后读入文件的最后一行,检查模式是否在最后一行。如果是,你的最后一行是你的页脚变量,你可以用skip footer读取,否则就直接读入整个内容,忽略last_line。

with open('filename.txt') as f:
    for line in f:
        pass
    last_line = line

if "some value" in last_line:
    df = pd.read_csv("path", skipfooter=1, engine"python")
else:
    df = pd.read_csv("path", engine"python")
4uqofj5v

4uqofj5v2#

由于预期的页脚比其他行有更多的列,on_bad_lines(在版本1.3.0.中引入)可以用来分隔数据和页脚。如文档所示,on_bad_lines指定遇到坏行(具有太多字段的行)时该怎么做。
使用可调用特性(在1.4.0版中引入,仅在engine="python"时支持):

import pandas as pd

footer = [] # variable to store footer(s) data

def record_footer(bad_line):
    footer.append(bad_line)
    print(footer)

path = 'test.txt' # directory to data file.

df = pd.read_csv(path, on_bad_lines=record_footer, engine='python')

print(df)

输出如下。第一行是提取的页脚。

[['Date:20200225', 'Start:1200', 'End:1300', 'Session:2', 'Exp:12', 'Type:"mono"']]
   col1  col2  col3
0   100    up  1.24
1   874  down  3.54
2   122    up  3.34

相关问题