我有一个文本文件保存在S3上,这是一个制表符分隔表.我想将它加载到pandas但不能保存它,因为我在heroku服务器上运行.这是我到目前为止所拥有的.
import io
import boto3
import os
import pandas as pd
os.environ["AWS_ACCESS_KEY_ID"] = "xxxxxxxx"
os.environ["AWS_SECRET_ACCESS_KEY"] = "xxxxxxxx"
s3_client = boto3.client('s3')
response = s3_client.get_object(Bucket="my_bucket",Key="filename.txt")
file = response["Body"]
pd.read_csv(file, header=14, delimiter="\t", low_memory=False)
Run Code Online (Sandbox Code Playgroud)
错误是
OSError: Expected file path name or file-like object, got <class 'bytes'> type
Run Code Online (Sandbox Code Playgroud)
如何将响应体转换为pandas接受的格式?
pd.read_csv(io.StringIO(file), header=14, delimiter="\t", low_memory=False)
returns
TypeError: initial_value must be str or None, not StreamingBody
pd.read_csv(io.BytesIO(file), header=14, delimiter="\t", low_memory=False)
returns
TypeError: 'StreamingBody' does not support the buffer interface
Run Code Online (Sandbox Code Playgroud)
更新 - 使用以下工作
file = response["Body"].read()
Run Code Online (Sandbox Code Playgroud)
和
pd.read_csv(io.BytesIO(file), header=14, …Run Code Online (Sandbox Code Playgroud) 我想将数据帧保存到s3,但是当我将文件保存到s3时,它将创建带有的空文件${folder_name},我想在其中保存文件。
保存数据框的语法:-
f.write.parquet("s3n://bucket-name/shri/test")
Run Code Online (Sandbox Code Playgroud)
它将文件保存在测试文件夹中,但$test在下创建shri。
有没有一种方法可以保存它而不创建该额外的文件夹?