বোটো 3 এর সাথে স্ট্রিং হিসাবে এস 3 অবজেক্টটি খুলুন


149

আমি সচেতন যে বোটো 2 এর মাধ্যমে স্ট্রিং হিসাবে কোনও এস 3 অবজেক্টটি খোলা সম্ভব: get_contents_as_string()

বোটো 3 তে কি সমমানের কোন কার্য রয়েছে?


8
আমি বলতে চাইছি চূড়ান্ত উত্তরটি বেছে নেব, আমার নিজের
পছন্দটি

উত্তর:


228

readবাইট ফিরে আসবে। কমপক্ষে পাইথন 3 এর জন্য, আপনি যদি কোনও স্ট্রিং ফিরে আসতে চান তবে আপনাকে ডান এনকোডিং ব্যবহার করে ডিকোড করতে হবে:

import boto3

s3 = boto3.resource('s3')

obj = s3.Object(bucket, key)
obj.get()['Body'].read().decode('utf-8') 

1
কাজ করার জন্য এই উত্তর পেতে, আমি ছিল import botocoreযেমন obj.get()['Body']ধরনের হয়<class 'botocore.response.StreamingBody'>
Tzunghsing ডেভিড ওয়াং

1
@ তজুনঘসিংডেভিডওয়ং আপনি কি কোনও বিদ্যমান অবজেক্টে পদ্ধতি কল করার জন্য কোনও প্যাকেজ আমদানি করতে হবে না, তাই না? পরীক্ষা-নিরীক্ষার সময় কি কেবল এটি প্রয়োজনীয় ছিল?
কেন উইলিয়ামস 21

1
আপত্তি = এস 3-তে কীটির মান কত? অজেক্ট (বালতি, কী) ** বালতি বুকনারাম ?? এবং কী ফাইলটির নাম ??? *** যদি ভুল হয় তবে আমাকে সংশোধন করুন ...
অমরেশ জানা

1
@ আমরেশ হ্যাঁ, বালতি = বালতির নাম এবং কী = ফাইলের নাম
টিপস্টার

যদি একটি কী পিডিএফ ফর্ম্যাট হয় তবে এটি কি কাজ করে? অথবা দয়া করে অন্য দরকারী উপায় সুপারিশ, আমি আমদানি textract টেক্সট = textract.process চেষ্টা ( 'পাথ / থেকে / a.pdf', পদ্ধতি = 'pdfminer') এটা আমদানি ত্রুটি বীজ বপন করবে
অরুণ কুমার

96

.get()একটি এডাব্লুএস ল্যাম্বডায় পাইথন ২. I ব্যবহার করার কারণে S3 থেকে অবজেক্টটি পড়তে / পার্স করতে আমার সমস্যা হয়েছিল ।

আমি জেসনকে উদাহরণটিতে যুক্ত করে দেখলাম এটি পার্সেবল হয়ে গেছে :)

import boto3
import json

s3 = boto3.client('s3')

obj = s3.get_object(Bucket=bucket, Key=key)
j = json.loads(obj['Body'].read())

দ্রষ্টব্য (পাইথন ২.7 এর জন্য): আমার অবজেক্টটি সবই এসসিআই, সুতরাং আমার দরকার নেই .decode('utf-8')

দ্রষ্টব্য: (পাইথন ৩.+++ এর জন্য): আমরা পাইথন ৩.6 এ স্থানান্তরিত করেছি এবং আবিষ্কার করেছি যে read()এখন ফিরে আসে bytesআপনি যদি এর থেকে স্ট্রিং পেতে চান তবে আপনাকে অবশ্যই ব্যবহার করতে হবে:

j = json.loads(obj['Body'].read().decode('utf-8'))


18
আমার জন্য কাজ! এডাব্লুএস বোটো 3 ডকুমেন্টেশন একটি জগাখিচুড়ি
টিমো

76

এটি বোটো 3 ডকুমেন্টেশনে নেই। এটি আমার পক্ষে কাজ করেছে:

object.get()["Body"].read()

অবজেক্টটি একটি এস 3 অবজেক্ট: http://boto3.readthedocs.org/en/latest/references/services/s3.html#object


1
"বডি" স্ট্রিং ডেটা ধারণ করে ধরেই রেখেছেন, আপনি অবজেক্ট.জেট () ["বডি"] ব্যবহার করতে পারেন read
রোহরিজন

28
বোটো 3 2016 সালের হিসাবে ভয়ানক ডক পান
অ্যান্ড্রু_1510

3
boto3.readthedocs.io/en/latest/references/services/… আমাদের ফিরতি মান ডিক বলে, স্ট্রিমিংবডি টাইপের একটি কী "বডি" সহ, ডকগুলিতে পড়ার জন্য অনুসন্ধান করা আপনাকে বোটোকোর.ড্রেডহেডসকস.আইও / তে পৌঁছে দেয় en / সর্বশেষ / রেফারেন্স / প্রতিক্রিয়া html যা আপনাকে পড়তে () ব্যবহার করতে বলবে।
জেফ্রি

3
এখন মনে হচ্ছে get expected at least 1 arguments, got 0get()"বডি" অবজেক্ট প্রোপার্টিটি সরাসরি সরান এবং অ্যাক্সেস করুন
লুসারচার

13

পাইথন 3 + বোটো 3 এপিআই ব্যবহার করে।

ব্যবহারের S3.Client.download_fileobj এপিআই এবং পাইথন ফাইল মত বস্তু , এস 3 অবজেক্ট বিষয়বস্তু মেমরি উদ্ধার করা যেতে পারে।

যেহেতু পুনরুদ্ধার করা বিষয়বস্তু বাইট, তাই স্টে রূপান্তর করতে , এটি ডিকোড করা দরকার need

import io
import boto3

client = boto3.client('s3')
bytes_buffer = io.BytesIO()
client.download_fileobj(Bucket=bucket_name, Key=object_key, Fileobj=bytes_buffer)
byte_value = bytes_buffer.getvalue()
str_value = byte_value.decode() #python3, default decoding is utf-8

-5

যদি শরীরে একটি আইও স্ট্রিংআইও থাকে তবে আপনাকে নীচের মতো করতে হবে:

object.get()['Body'].getvalue()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.