используя панд read_excel для чтения из стандартного ввода - PullRequest
0 голосов
/ 05 июня 2019

Примечание: я решил эту проблему, как показано ниже:

Я могу использовать to_csv для записи в stdout в 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)

Но это не похоже на работу.Можно ли сделать то, что я пытаюсь, и если да, то как это сделать?

Примечания:

  1. Фактический входной файл - «MSA_M2018_dl.xlsx», которыйв zip-файле https://www.bls.gov/oes/special.requests/oesm18ma.zip.

Я загружаю и извлекаю файл данных следующим образом:

curl -o oesm18ma.zip'https://www.bls.gov/oes/special.requests/oesm18ma.zip'
7z x oesm18ma.zip

Я решил проблему следующим образом с помощью скрипта test01.py, который читает из stdin и пишет в stdout.Обратите внимание на использование sys.stdin.buffer в вызове read_excel ().

import sys import os import pandas как pd

BLS_DF = pd.read_excel (sys.stdin.buffer, sheet_name = "MSA_dl", index_col = Нет)

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

Я вызываю это как:

кошка MSA_M2018_dl.xlsx |python3 test01.py

Это небольшая тестовая программа, иллюстрирующая идею при устранении сложности.Это не та программа, над которой я работаю.

1 Ответ

1 голос
/ 05 июня 2019

Исходя из этого ответа, возможность будет:

import sys
import pandas as pd
import io

csv = ""
for line in sys.stdin:
    csv += line

df = pd.read_csv(io.StringIO(csv))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...