पढ़ने के लिए फ़ाइल खोलते समय त्रुटि मैं अपने lambda फ़ंक्शन से नीचे की त्रुटि देख रहा हूं जब मैं एक फ़ाइल csv को S3 बाल्टी में छोड़ देता हूं। फ़ाइल बड़ी नहीं है और मैंने पढ़ने के लिए फ़ाइल खोलने से पहले 60 सेकंड नींद भी जोड़ा है, लेकिन किसी कारण से फ़ाइल में अतिरिक्त ".6CEdFe7C" संलग्न है। ऐसा क्यों है?पायथन केवल पढ़ने के लिए फ़ाइल सिस्टम S3 और Lambda के साथ त्रुटि
[Errno 30] Read-only file system: u'/file.csv.6CEdFe7C': IOError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 75, in lambda_handler
s3.download_file(bucket, key, filepath)
File "/var/runtime/boto3/s3/inject.py", line 104, in download_file
extra_args=ExtraArgs, callback=Callback)
File "/var/runtime/boto3/s3/transfer.py", line 670, in download_file
extra_args, callback)
File "/var/runtime/boto3/s3/transfer.py", line 685, in _download_file
self._get_object(bucket, key, filename, extra_args, callback)
File "/var/runtime/boto3/s3/transfer.py", line 709, in _get_object
extra_args, callback)
File "/var/runtime/boto3/s3/transfer.py", line 723, in _do_get_object
with self._osutil.open(filename, 'wb') as f:
File "/var/runtime/boto3/s3/transfer.py", line 332, in open
return open(filename, mode)
IOError: [Errno 30] Read-only file system: u'/file.csv.6CEdFe7C'
कोड:
def lambda_handler(event, context):
s3_response = {}
counter = 0
event_records = event.get("Records", [])
s3_items = []
for event_record in event_records:
if "s3" in event_record:
bucket = event_record["s3"]["bucket"]["name"]
key = event_record["s3"]["object"]["key"]
filepath = '/' + key
print(bucket)
print(key)
print(filepath)
s3.download_file(bucket, key, filepath)
ऊपर का परिणाम है:
mytestbucket
file.csv
/file.csv
[Errno 30] Read-only file system: u'/file.csv.6CEdFe7C'
तो कुंजी/फ़ाइल "file.csv" है, तो क्यों s3.download_file विधि करता है "file.csv.6CEdFe7C" डाउनलोड करने का प्रयास करें? मैं अनुमान लगा रहा हूं कि फ़ंक्शन ट्रिगर होने पर, फ़ाइल file.csv.xxxxx है, लेकिन जब तक यह लाइन 75 तक पहुंच जाती है, तो फ़ाइल का नाम बदलकर file.csv कर दिया जाता है?
डंप पढ़ने के बराबर नहीं है! तो अस्थायी फ़ोल्डर (या रैम में) पर आपकी फ़ाइल को 'self._osutil.open (फ़ाइल नाम,' wb ') को डंप करने की आवश्यकता नहीं है: ', केवल' rb'etc की अनुमति है। तो प्रसंस्करण से पहले स्रोत फ़ाइल संभाल लें। – dsgdfg