簡體   English   中英

read_csv熊貓函數的輸入

[英]Input for read_csv pandas function

我需要將我用Popen執行的一條命令的輸出提供給熊貓read_csv。

p = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
pandas.read_csv(stdout,index_col=0)

但是顯然stdout是一個字符串,它被解釋為路徑。 在API文檔中,它說“任何具有read()方法的對象(例如文件句柄或StringIO)”都可以作為read_csv函數的輸入。 如何從Popen命令中獲取此類對象? 最終目標是不寫入磁盤。

另外,當我將stdout的內容寫入磁盤時,我可以看到csv每行都有雙引號

alvarobrandon$ head csvfile.csv
"1507109453,<,java,12447,a3e9c495869d,docker,9.0.4.130,9.0.2.131,9.0.2.131,9.0.4.130,56182,9092,9092,56182,tcp"
"1507109453,<,java,1244,a3e9c495869d,docker,9.0.4.130,9.0.2.131,9.0.2.131,9.0.4.130,56182,9092,9092,56182,tcp"
"1507109453,<,java,12447,a3e9c495869d,docker,9.0.4.130,9.0.2.131,9.0.2.131,9.0.4.130,56182,9092,9092,56182,tcp"

您需要從stdout讀取並將該數據存儲到類似文件的StringIO對象中。 這是一個最小的工作示例。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import io
import subprocess
import pandas

cmd = ('cat', '/tmp/csvfile')
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
csv = io.StringIO(process.stdout.read().decode())
data = pandas.read_csv(csv, index_col=0)
csv.close()

希望這可以幫助!

編輯(輸出不是真正的CSV,因此在解析之前我們必須對其進行一些清理):

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import io
import subprocess
import pandas

cmd = ('cat', '/tmp/csvfile')
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
csv = io.StringIO()
for line in process.stdout:
    csv.write(line.decode().strip('"\n') + '\n')
csv.seek(0)
data = pandas.read_csv(csv, index_col=0)
csv.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM