मैं थोड़ी किस्मत के साथ एक डॉक्क्स फ़ाइल में टेक्स्ट ढूंढने और बदलने के लिए बहुत सी विधि खोज रहा हूं। मैंने डॉक्क्स मॉड्यूल की कोशिश की है और इसे काम करने के लिए नहीं मिल सका। आखिरकार मैंने ज़िपफाइल मॉड्यूल का उपयोग करके नीचे वर्णित विधि का काम किया और दस्तावेज़.एक्सएमएल फ़ाइल को डॉक्स संग्रह में बदल दिया। इस काम के लिए आपको उस पाठ के साथ एक टेम्पलेट दस्तावेज़ (डॉक्क्स) की आवश्यकता है जिसे आप अनन्य तारों के रूप में प्रतिस्थापित करना चाहते हैं जो दस्तावेज में किसी अन्य मौजूदा या भविष्य के पाठ से संभवतः मेल नहीं खा सकता है (उदाहरण के लिए। "XXXMEETDATEXXX पर XXXCLIENTNAMEXXX के साथ बैठक बहुत अच्छी तरह से चली गई। ")।.docx फ़ाइल में टेक्स्ट ढूंढें और बदलें - पायथन
import zipfile
replaceText = {"XXXCLIENTNAMEXXX" : "Joe Bob", "XXXMEETDATEXXX" : "May 31, 2013"}
templateDocx = zipfile.ZipFile("C:/Template.docx")
newDocx = zipfile.ZipFile("C:/NewDocument.docx", "a")
with open(templateDocx.extract("word/document.xml", "C:/")) as tempXmlFile:
tempXmlStr = tempXmlFile.read()
for key in replaceText.keys():
tempXmlStr = tempXmlStr.replace(str(key), str(replaceText.get(key)))
with open("C:/temp.xml", "w+") as tempXmlFile:
tempXmlFile.write(tempXmlStr)
for file in templateDocx.filelist:
if not file.filename == "word/document.xml":
newDocx.writestr(file.filename, templateDocx.read(file))
newDocx.write("C:/temp.xml", "word/document.xml")
templateDocx.close()
newDocx.close()
मेरा प्रश्न यह है कि इस विधि में क्या गलत है? मैं इस सामान के लिए बहुत नया हूं, इसलिए मुझे लगता है कि किसी और को पहले से ही यह पता लगाना चाहिए था। जो मुझे विश्वास दिलाता है कि इस दृष्टिकोण के साथ कुछ गड़बड़ है। लेकिन यह काम करता है! मुझे यहां क्या समझ नहीं आ रहा है?
।
यहाँ हर किसी के लिए मेरे विचार प्रक्रिया का एक पूर्वाभ्यास और ने इस सामान जानने की कोशिश कर रहा है:
चरण 1) पाठ स्ट्रिंग्स आप कुंजी और आइटम के रूप में नया पाठ के रूप में बदलना चाहते हैं की एक अजगर शब्दकोश तैयार (जैसे {"XXXCLIENTNAMEXXX": "जो बॉब", "XXXMEETDATEXXX": "31 मई, 2013"})।
चरण 2) ज़िपफाइल मॉड्यूल का उपयोग कर टेम्पलेट docx फ़ाइल खोलें।
चरण 3) एपेंड एक्सेस मोड के साथ एक नई नई डॉक्स फ़ाइल खोलें।
चरण 4) टेम्पलेट docx फ़ाइल से document.xml (जहां सभी पाठ रहता है) निकालें और टेक्स्ट स्ट्रिंग चर के लिए xml पढ़ें।
चरण 5) अपने नए टेक्स्ट के साथ xml टेक्स्ट स्ट्रिंग में अपने शब्दकोश में परिभाषित सभी पाठ को प्रतिस्थापित करने के लिए लूप के लिए उपयोग करें।
चरण 6) xml टेक्स्ट स्ट्रिंग को एक नई अस्थायी xml फ़ाइल में लिखें।
चरण 7) टेम्पलेट docx संग्रह में सभी फ़ाइलों को प्रतिलिपि बनाने के लिए लूप और ज़िप्फ़ाइल मॉड्यूल का उपयोग करें, किसी नए डॉक्क्स संग्रह को शब्द/document.xml फ़ाइल से बाहर निकालें।
चरण 8) अस्थायी एक्सएमएल फ़ाइल को प्रतिस्थापित टेक्स्ट के साथ नए डॉकएक्स संग्रह में एक नए शब्द/document.xml फ़ाइल के रूप में लिखें।
चरण 9) अपना टेम्पलेट और नया डॉक्क्स अभिलेखागार बंद करें।
चरण 10) अपना नया डॉक्क्स दस्तावेज़ खोलें और अपने प्रतिस्थापित टेक्स्ट का आनंद लें!
--Edit-- समापन कोष्ठक ')' लाइनों 7 पर और 11
आपका मतलब है कि आपके द्वारा पोस्ट किया गया कोड काम करता है और आप पूछ रहे हैं, "किसी और ने ऐसा क्यों नहीं किया?" शायद किसी के पास है। यह एक समस्या क्यों होगी? अपने कोड पर एक सरसरी नज़र से, यह करने के लिए सही काम की तरह दिखता है। –
बेशक लोगों ने पहले यह किया है। यह एक फार्म पत्र का एक बेरबोन कार्यान्वयन है। माइक्रोसॉफ्ट वर्ड (और ओपनऑफिस और आदि) में "मेल मर्ज" फ़ंक्शन है जो इसे मूल रूप से करेगा। –
यह प्रश्न ऑफ-विषय प्रतीत होता है क्योंकि यह कार्य कोड की समीक्षा करने के बारे में है। Codereview.SE पर माइग्रेशन की सिफारिश करें –