दिलचस्प पोस्ट
जीमेल जवाब देने की उपेक्षा करने के लिए दिखाई देते हैं भंडारण छवियां: डीबी या फाइल सिस्टम – टास्कबार के शीर्ष पर पूर्ण स्क्रीन में एक विंडोज फॉर्म कैसे प्रदर्शित करें? Std :: istringstream अलग-अलग std :: ifstream को टर्नेरी (? :) ऑपरेटर में क्यों हल करता है? 2 सप्ताह का प्रदर्शन jQuery के पूर्ण कैलेंडर आप किसी ऑरेकल प्रक्रिया से परिणाम स्वरूप कैसे प्राप्त कर सकते हैं जो संदर्भ कर्सर देता है? आप कैसे xaml से पैरामीटर पास करते हैं? विज्ञापनप्रणाली और पहचानकर्ता फ़ोरेन्डर वापसी "00000000-0000-0000-0000-000000000000" मोबाइल डिवाइस पर बूटस्ट्रैप 3 – डेस्कटॉप दृश्य तालिका से जानकारी चुनें जहां पंक्ति की अधिकतम तिथि है तेजी से दूसरे दृश्य नियंत्रक से तालिका दृश्य को पुनः लोड कैसे करें वीबी 6 में यूनिकोड पाठ (हिब्रू, आदि) को प्रदर्शित करने का सबसे अच्छा विकल्प क्या है JQuery के अजाक्स का उपयोग कर एक MVC नियंत्रक विधि में ऑब्जेक्ट्स की एक सूची पास करना फायरबेज संग्रहण और एक्सेस-कंट्रोल-अनुमति-मूल 5 सॉर्ट किए गए एरे के मध्य

टेक्स्ट फ़ाइल की निर्दिष्ट स्थिति पर लाइन डालने

मेरे पास एक पाठ फ़ाइल है जो इस तरह दिखती है:

blah blah foo1 bar1 foo1 bar2 foo1 bar3 foo2 bar4 foo2 bar5 blah blah 

अब मैं 'foo1 bar3' और 'foo2 bar4' बीच 'foo bar' को सम्मिलित करना चाहता हूं।

मैंने इस तरह से इसे किया:

 import shutil txt = '1.txt' tmptxt = '1.txt.tmp' with open(tmptxt, 'w') as outfile: with open(txt, 'r') as infile: flag = 0 for line in infile: if not line.startswith('foo1') and flag == 0: outfile.write(line) continue if line.startswith('foo1') and flag == 0: flag = 1 outfile.write(line) continue if line.startswith('foo1') and flag == 1: outfile.write(line) continue if not line.startswith('foo1') and flag == 1: outfile.write('foo bar\n') outfile.write(line) flag = 2 continue if not line.startswith('foo1') and flag == 2: outfile.write(line) continue shutil.move(tmptxt, txt) 

यह मेरे लिए काम करता है, लेकिन बदसूरत दिखता है

Solutions Collecting From Web of "टेक्स्ट फ़ाइल की निर्दिष्ट स्थिति पर लाइन डालने"

"छद्म-इन-प्लेस" बनाने का सबसे अच्छा तरीका एक फ़ाइल को पायथन में बदलता है मानक fileinput से फ़ाइल fileinput मॉड्यूल के साथ:

 import fileinput processing_foo1s = False for line in fileinput.input('1.txt', inplace=1): if line.startswith('foo1'): processing_foo1s = True else: if processing_foo1s: print 'foo bar' processing_foo1s = False print line, 

यदि आप पुराने संस्करण को चारों ओर रखना चाहते हैं तो आप बैकअप एक्सटेंशन को निर्दिष्ट भी कर सकते हैं, लेकिन यह आपके कोड के समान ही काम करता है – बैकअप एक्सटेंशन के रूप में .bak का उपयोग करता है, लेकिन परिवर्तन सफलतापूर्वक पूरा हो जाने के बाद भी इसे हटा देता है

सही मानक पुस्तकालय मॉड्यूल का उपयोग करने के अलावा, यह कोड सरल तर्क का उपयोग करता है: foo1 साथ शुरू होने वाली प्रत्येक पंक्ति के बाद एक "foo bar" पंक्ति सम्मिलित करने के लिए, बुलियन आपको बस की आवश्यकता है (क्या मैं इस तरह के भाग में हूं या नहीं?) और सवाल में bool बिना शर्त निर्धारित किया जा सकता है बस उस आधार पर कि वर्तमान पंक्ति उस तरह से शुरू होती है या नहीं। यदि आपके पास सटीक तर्क है जो इस इच्छा से थोड़ी अलग है (जो कि मैंने आपके कोड से किया है), तो इस कोड को तदनुसार ज़्यादा नहीं करना चाहिए।

एलेक्स मार्टले के उदाहरण का अनुकूलन:

 import fileinput for line in fileinput.input('1.txt', inplace=1): print line, if line.startswith('foo1 bar3'): print 'foo bar' 

स्मरण करो कि एक इटरेटर प्रथम श्रेणी के ऑब्जेक्ट है। इसे बयानों के लिए एकाधिक में उपयोग किया जा सकता है

यहां बहुत सारे जटिल-बिना-बयानों और झंडे के बिना इसे संभालने का एक तरीका है।

 with open(tmptxt, 'w') as outfile: with open(txt, 'r') as infile: rowIter= iter(infile) for row in rowIter: if row.startswith('foo2'): # Start of next section break print row.rstrip(), repr(row) print "foo bar" print row for row in rowIter: print row.rstrip()