मैं वर्तमान में एक स्क्रिप्ट लिख रहा हूं जो एक फाइल की लाइन को दो अन्य फाइलों की सामग्री के साथ बदल रही है और नई लाइन को एक नई फाइल में लिखने के ठीक बाद। लेकिन मेरी स्क्रिप्ट चलाते समय केवल पहली फ़ाइल की सामग्री को लाइन की सामग्री से बदल दिया गया था।

मेरा कोड:

with open('file1.txt','r') as file1, open('file2.txt','r') as file2, \
     open('original.txt','r') as original:
    for lines in original:
        with open('sample.txt','w') as sample:
            for line in file1:
                sample.write(lines.replace(line,''))
        sample.close()
        with open('sample.txt','w') as sample:
            for line in file2:
                sample.write(lines.replace(line,''))
        sample.close()

मेरी फ़ाइल1 की सामग्री:

Python

मेरी फ़ाइल 2 की सामग्री:

Pascal

मेरी मूल फ़ाइल की सामग्री:

I Python like Pascal cookies

मेरी स्क्रिप्ट चलाने के बाद नई फ़ाइल की सामग्री:

I like Pascal cookies

मेरी स्क्रिप्ट चलाने के बाद नई फ़ाइल की सामग्री वास्तव में कैसी दिखनी चाहिए:

I like cookies

क्या मुझसे कुछ गलत हो रही है? क्या कोई मुझे बता सकता है कि क्या गलत है और इस समस्या को हल करने में मदद करें?

1
iLikeCookies 5 सितंबर 2021, 03:16

2 जवाब

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

समस्या यह है कि आपके replace हमेशा मूल मान को लक्षित कर रहे हैं, lines ताकि आपके अनेक परिवर्तन जमा न हों। तो उदाहरण के लिए

a = 'ciao'
a.replace('i', 'I')
print(a)

ciao प्रिंट करेगा क्योंकि रिप्लेस एक नई स्ट्रिंग (स्ट्रिंग्स अपरिवर्तनीय हैं) ऑब्जेक्ट जिसे आपको कुछ वेरिएबल में स्टोर करने की आवश्यकता है अन्यथा ... बस बेकार

यहाँ एक समाधान

with open('./file1','r') as file1, open('./file2','r') as file2, open('original','r') as original:

    with open('sample.txt','w') as sample:
        a = original.read()
        b = a.replace(file1.read(), '')
        c = b.replace(file2.read(), '')
        
        sample.write(c)
    
with open('sample.txt', 'r') as fd: print(fd.read())

उत्पादन

I  like  cookies
1
cards 5 सितंबर 2021, 00:52

सूची का उपयोग करके एक और उदाहरण यहां दिया गया है

#!/usr/bin/env python3.7
with(open('file1','r') as f1,
     open('file2', 'r') as f2,
     open('original', 'r') as orig,
     open('new.txt', 'w') as newfile):

    origtxt = orig.read()
    tmplist = [f1.read(),f2.read()]
    
    for i in range(len(tmplist)):
        origtxt = origtxt.replace(f'{tmplist[i]} ','')
    newfile.write(origtxt)
0
BitByteBit 5 सितंबर 2021, 03:21