हमारे एक S3 बकेट में, हमारे पास मेल मर्ज फ़ील्ड के साथ एक .docx फ़ाइल है।

मैं जो करने की कोशिश कर रहा हूं वह इसे सीधे स्थानीय रूप से डाउनलोड किए बिना सीधे बाल्टी से पढ़ रहा है!

आम तौर पर, मैं एक फ़ाइल खोल सकता हूं और इस कोड के उपयोग के माध्यम से मेल मर्ज फ़ील्ड देख सकता हूं:

from mailmerge import MailMerge
document = MailMerge(r'C:\Users\User\Desktop\MailMergeFile.docx') # Trying to get a variable to pass in here
print(document.get_merge_fields())

जैसा कि ऊपर देखा गया है, मैं जो करने की कोशिश कर रहा हूं वह वस्तु को इस तरह से प्राप्त करना है जहां मैं इसे मेलमर्ज विधि में पास कर सकता हूं, जैसे कि मैं अपनी स्थानीय मशीन पर पथ पास कर रहा था।

ऐसा करने के लिए मैंने जिन तरीकों को देखा है, वे काम नहीं कर पाए हैं।

fileobj = s3.get_object(
    Bucket='bucketname',
    Key='folder/mailmergefile.docx'
    ) 

word_file = fileobj['Body'].read()
contents = word_file.decode('ISO-8859-1') # can't use utf-8 as that gives encoding error

contents

लेकिन फिर जब मैं मेलमर्ज फ़ंक्शन में contents चर को आज़माकर पास करता हूं, तो मुझे एक और त्रुटि मिलती है:

document = MailMerge(contents)
print(document.get_merge_fields())

मुझे जो त्रुटि मिलती है वह है: ValueError: embedded null character

0
Yeahprettymuch 1 अप्रैल 2020, 08:15

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि आप docx-mailmerge · PyPI का उपयोग कर रहे हैं।

दस्तावेज़ीकरण काफी विरल है लेकिन MailMerge('input.docx') दिखाता है, जो बताता है कि यह एक फ़ाइल के नाम की अपेक्षा कर रहा है, न कि किसी फ़ाइल की 'सामग्री' की।

कोड देखकर ऐसा लगता है ज़िप फ़ाइल खोलने के लिए पुस्तकालय।

नीचे की पंक्ति: जैसा लिखा है, वह फ़ाइल का नाम चाहता है, फ़ाइल की सामग्री नहीं।

1
John Rotenstein 1 अप्रैल 2020, 06:56