Search code examples
python-3.xreplacein-place

Python : Updating multiple words in a text file based on text in another text file using in_place module


I have a text file say storyfile.txt
Content in storyfile.txt is as

'Twas brillig, and the slithy toves Did gyre and gimble in the wabe; All mimsy were the borogoves, And the mome raths outgrabe


I have another file- hashfile.txt that contains some words separated by comma(,)

Content of hashfile.txt is:

All,mimsy,were,the,borogoves,raths,outgrabe


My objective

My objective is to
1. Read hashfile.txt
2. Insert Hashtag on each of the comma separated word
3. Read storyfile.txt . Search for same words as in hashtag.txt and add hashtag on these words.
4. Update storyfile.txt with words that are hash-tagged

My Python code so far

import in_place

hashfile = open('hashfile.txt', 'w+')
n1 = hashfile.read().rstrip('\n')
print(n1)

checkWords = n1.split(',')
print(checkWords)

repWords = ["#"+i for i in checkWords]
print(repWords)
hashfile.close()

with in_place.InPlace('storyfile.txt') as file:
    for line in file:
        for check, rep in zip(checkWords, repWords):
            line = line.replace(check, rep)
            file.write(line)

The output

can be seen here https://dpaste.de/Yp35

Why is this kind of output is coming? Why the last sentence has no newlines in it? Where I am wrong?
The output
attached image

The current working code for single text

import in_place

with in_place.InPlace('somefile.txt') as file:
    for line in file:
        line = line.replace('mome', 'testZ')
        file.write(line)

Solution

  • Look if this helps. This fulfills the objective that you mentioned, though I have not used the in_place module.

    hash_list = []
    with open("hashfile.txt", 'r') as f:
        for i in f.readlines():
            for j in i.split(","):
                hash_list.append(j.strip())
    with open("storyfile.txt", "r") as f:
        for i in f.readlines():
            for j in hash_list:
                i = i.replace(j, "#"+j)
            print(i)
    

    Let me know if you require further clarification on the same.