Python 使用pandas read_excel读取标准数据

Python 使用pandas read_excel读取标准数据,python,excel,pandas,dataframe,stdin,Python,Excel,Pandas,Dataframe,Stdin,注:我已按以下方式解决此问题: 我可以用python/pandas来编写标准输出。类似这样的方法很好: final_df.to_csv(sys.stdout, index=False) 我想读入一个实际的excel文件(不是csv)。我想输出CSV,但输入xlsx。我有这个档案 bls_df = pd.read_excel(sys.stdin, sheet_name="MSA_dl", index_col=None) 但这似乎不起作用。有可能做我正在尝试的事情吗?如果有,怎么做 注: 实际输

注:我已按以下方式解决此问题:

我可以用python/pandas来编写标准输出。类似这样的方法很好:

final_df.to_csv(sys.stdout, index=False)
我想读入一个实际的excel文件(不是csv)。我想输出CSV,但输入xlsx。我有这个档案

bls_df = pd.read_excel(sys.stdin, sheet_name="MSA_dl", index_col=None)
但这似乎不起作用。有可能做我正在尝试的事情吗?如果有,怎么做

注:

  • 实际输入文件是zip文件中的“MSA_M2018_dl.xlsx”
  • 我下载并解压缩数据文件,如下所示:

    curl -o oesm18ma.zip'https://www.bls.gov/oes/special.requests/oesm18ma.zip'
    7z x oesm18ma.zip
    
  • 我用脚本test01.py解决了以下问题,该脚本从stdin读取并写入stdout。注意在read\u excel()调用中使用了sys.stdin.buffer

    导入系统 导入操作系统 作为pd进口熊猫

    BLS_DF=pd.read_excel(sys.stdin.buffer,sheet_name=“MSA_dl”,index_col=None)

    BLS_DF.to_csv(sys.stdout,index=False)

  • 我这样说是因为:

    cat MSA_M2018_dl.xlsx|python3 test01.py

  • 这是一个小的测试程序,可以在消除复杂性的同时说明这个想法。这不是我正在做的实际项目

  • 根据答案,一种可能性是:

    import sys
    import pandas as pd
    import io
    
    csv = ""
    for line in sys.stdin:
        csv += line
    
    df = pd.read_csv(io.StringIO(csv))
    

    假设sys.stdin是您要读取的excel文件的字符串是否安全?我不确定“字符串”是什么意思。它是excel文件的实际内容。假设我上面的程序名为foo.py,那么我想调用类似于:cat excelfile.xlsx | python3 foo.pystring的内容,即返回字符串的
    type()
    。你需要给我们提供更多的背景资料。示例数据和更多代码。当然,当你说“这是excel文件的实际内容”时,我不明白。excel文件是二进制文件而不是文本。我可以使用pandas从stdin读取excel,我的问题是pandas似乎只在使用
    时成功地从stdin读取excel,而不是
    cat/path/to/file.xlsx
    源文件是一个xlsx,而不是csv。您不能简单地使用cat输出xlsx文件,您要么需要首先转换它,例如使用xlsx2csv,然后将其视为csv,要么需要找到一种方法将其作为字节流提供。我想我认为xlsx2csv会起作用,尽管我确实找到了一种直接执行的方法,正如我在上面修订的问题中所指出的。