choman choman - 6 days ago 6
Python Question

Issue removing duplicate from a text file

My objective is to remove duplicate words from a paragraph in a text file (unicode) and generate a list of words. So far I have been able to remove unwanted characters & blank spaces. However I am having difficulty squeezing in the code to remove duplicate words. I tries using set but my values returned are null

This is my code.

with open ('words.txt',mode='r',encoding='utf8')as f:

#open file and split each word
for line in f:


for word in line.split():

#remove unwanted characters

for char in ['।',',','’','‘','?']:
if char in word:
word = word.replace(char,'')



# remove blank line
if word.strip():

print (word)


This is the words.txt

महाभूकम्पले महाभूकम्पले महाभूकम्पले महाभूकम्पले हामीलाई देश निर्माणमा एकजुट भएर लाग्ने भावना प्रदान गरेको छ । प्राकृतिक संकटले निम्त्याएको राष्ट्रिय एकताको भावना महत्त्वपूर्ण छ । भूकम्पबाट भएको क्षतिलाई कसरी शक्तिमा परिवर्तन गर्ने भन्ने प्रश्न अब मुख्य हो । आज हुर्किंदै गरेको नयाँ पुस्ताका लागि पनि यस्तो भावना जरुरी भइसक्यो ।
भर्खरै संसद्मा पारित संकल्प प्रस्तावको भावना महत्त्वपूर्ण छ । त्यसलाई चरितार्थ गर्ने–नगर्ने हामी नेपालीमा निर्भर छ । यस सन्दर्भमा एमाओवादी अध्यक्ष पुष्पकमल दाहालले संसद्मा दिएको अभिव्यक्तिले मलाई छोयो । ‘हामीले आआफ्ना दलीय स्वार्थ र संकुचनभन्दा बाहिर आएर राष्ट्रिय दृष्टिकोण राखेर उठाऔं, त्यसले नयाँ संविधान र राष्ट्रिय पुनर्निर्माणको भावना निर्माण हुन्छ,’ भनी उहाँले भन्नुभएको छ । हाम्रा नेताहरूको घैंटोमा घाम लागेको संकेत हो यो । उहाँहरूलाई आ–आफ्नै डम्फु बजाएर देश बन्दैन भन्ने चेतना भएजस्तो छ ।
महाभूकम्पले हामीलाई देश निर्माणमा एकजुट भएर लाग्ने भावना प्रदान गरेको छ । प्राकृतिक संकटले निम्त्याएको राष्ट्रिय एकताको भावना महत्त्वपूर्ण छ । भूकम्पबाट भएको क्षतिलाई कसरी शक्तिमा परिवर्तन गर्ने भन्ने प्रश्न अब मुख्य हो । आज हुर्किंदै गरेको नयाँ पुस्ताका लागि पनि यस्तो भावना जरुरी भइसक्यो ।
भर्खरै संसद्मा पारित संकल्प प्रस्तावको भावना महत्त्वपूर्ण छ । त्यसलाई चरितार्थ गर्ने–नगर्ने हामी नेपालीमा निर्भर छ । यस सन्दर्भमा एमाओवादी अध्यक्ष पुष्पकमल दाहालले संसद्मा दिएको अभिव्यक्तिले मलाई छोयो । ‘हामीले आआफ्ना दलीय स्वार्थ र संकुचनभन्दा बाहिर आएर राष्ट्रिय दृष्टिकोण राखेर उठाऔं, त्यसले नयाँ संविधान र राष्ट्रिय पुनर्निर्माणको भावना निर्माण हुन्छ,’ भनी उहाँले भन्नुभएको छ । हाम्रा नेताहरूको घैंटोमा घाम लागेको संकेत हो यो । उहाँहरूलाई आ–आफ्नै डम्फु बजाएर देश बन्दैन भन्ने चेतना भएजस्तो छ ।
महाभूकम्पले हामीलाई देश निर्माणमा एकजुट भएर लाग्ने भावना प्रदान गरेको छ । प्राकृतिक संकटले निम्त्याएको राष्ट्रिय एकताको भावना महत्त्वपूर्ण छ । भूकम्पबाट भएको क्षतिलाई कसरी शक्तिमा परिवर्तन गर्ने भन्ने प्रश्न अब मुख्य हो । आज हुर्किंदै गरेको नयाँ पुस्ताका लागि पनि यस्तो भावना जरुरी भइसक्यो ।
भर्खरै संसद्मा पारित संकल्प प्रस्तावको भावना महत्त्वपूर्ण छ । त्यसलाई चरितार्थ गर्ने–नगर्ने हामी नेपालीमा निर्भर छ । यस सन्दर्भमा एमाओवादी अध्यक्ष पुष्पकमल दाहालले संसद्मा दिएको अभिव्यक्तिले मलाई छोयो । ‘हामीले आआफ्ना दलीय स्वार्थ र संकुचनभन्दा बाहिर आएर राष्ट्रिय दृष्टिकोण राखेर उठाऔं, त्यसले नयाँ संविधान र राष्ट्रिय पुनर्निर्माणको भावना निर्माण हुन्छ,’ भनी उहाँले भन्नुभएको छ । हाम्रा नेताहरूको घैंटोमा घाम लागेको संकेत हो यो । उहाँहरूलाई आ–आफ्नै डम्फु बजाएर देश बन्दैन भन्ने चेतना भएजस्तो छ ।

Answer

I'll assume you want to write the words in the same text again, this is the code:

# !/usr/bin/env python
# -*- coding: utf-8 -*-

clean_list = []
with open('words.txt', mode='r') as f:
    # open file and split each word
    for line in f:

        for word in line.split():

            # remove unwanted characters
            for char in ['।', ',', '’', '‘', '?']:
                if char in word:
                    word = word.replace(char, '')

            # remove blank line
            if word.strip():
                clean_list.append(word)

    # removing repeated words
    clean_list = set(clean_list)

    # set as list again
    clean_list = list(clean_list)

# open the file again
with open('words.txt', mode='w+') as f:
    # clean file
    f.truncate()
    # writing the words
    for clean_word in clean_list:
        f.write(clean_word + ' ')

if you don't want to write it in the same file just change the last lines to this:

# open the file again
with open('new_words.txt', mode='w+') as f:
    # writing the words
    for clean_word in clean_list:
        f.write(clean_word + ' ')
Comments