কম্পিউটার টিউটোরিয়াল

পাইথনে একাধিক ডকুমেন্ট ফরম্যাটে (CSV, Text, MS Word) স্ট্রিং সার্চ কীভাবে করবেন

সমস্যা

ধরুন আপনার একটি ডিরেক্টরিতে বিভিন্ন ফরম্যাটের ফাইল আছে, যেখানে একটি নির্দিষ্ট কীওয়ার্ড খুঁজে বের করতে হবে।

প্রস্তুতি

নিচের প্যাকেজগুলো ইনস্টল করুন:

  1. beautifulsoup4
  2. python-docx

কীভাবে করবেন

১. CSV ফাইলে স্ট্রিং সার্চ ফাংশন

csv.reader মডিউল ব্যবহার করে ফাইলটি পড়ব এবং স্ট্রিং খুঁজে বের করব। পাওয়া গেলে True, না পেলে False ফেরত দেবে।

def csv_stringsearch(input_file, input_string):
    """Function: search a string in csv files.
    args: input file, input string"""
    with open(input_file) as file:
        for row in csv.reader(file):
            for column in row:
                if input_string in column.lower():
                    return True
    return False

২. টেক্সট ফাইলে স্ট্রিং সার্চ ফাংশন

এটি কিছুটা জটিল কারণ এনকোডিং নিয়ে কাজ করতে হয়। হাজার হাজার এনকোডিং আছে এবং এনকোডিং ফরম্যাট নির্ধারণ করা সবচেয়ে কঠিন অংশ। আমরা UnicodeDammit ব্যবহার করে এনকোডিং অনুমান করব।

def text_stringsearch(input_file, input_string):
    """Function: search a string in text files.
    args: input file, input string"""
    with open(input_file, 'rb') as file:
        content = file.read(1024)
        guessencoding = UnicodeDammit(content)
        encoding = guessencoding.original_encoding
    # এনকোডিং দিয়ে ফাইল খুলুন এবং পড়ুন
    with open(input_file, encoding=encoding) as file:
        for line in file:
            if input_string in line.lower():
                return True
    return False

৩. MS Word ডকুমেন্টে স্ট্রিং সার্চ ফাংশন

def MSDocx_stringsearch(input_file, input_string):
    """Function: search a string in MS Word documents.
    args: input file, input string"""
    doc = docx.Document(input_file)
    for paragraph in doc.paragraphs:
        if input_string in paragraph.text.lower():
            return True
    return False

৪. মেইন ফাংশন: ফাইলগুলো লুপ করে সার্চ করুন

এখানে আমি ধরে নিচ্ছি কোড এবং ইনপুট ফাইলগুলো একই ডিরেক্টরিতে আছে। পাথ প্যারামিটার যোগ করলে আলাদা লোকেশনও কাজ করবে।

def main(input_string):
    """Function: Open the current directory and search for a string in all the files
    args: input string"""
    for root, dirs, files in os.walk('.'):
        for file in files:
            # ফাইল এক্সটেনশন বের করুন
            extension = file.split('.')[-1]
            if extension in function_mapping:
                search_file = function_mapping.get(extension)
                full_file_path = os.path.join(root, file)
                if search_file(full_file_path, input_string):
                    print(f' *** Yeah String found in {full_file_path}')

৫. ফাংশনগুলিকে ফাইল এক্সটেনশনের সাথে ম্যাপ করুন

function_mapping = {
    'csv': csv_stringsearch,
    'txt': text_stringsearch,
    'docx': MSDocx_stringsearch,
}

৬. সম্পূর্ণ কোড একসাথে

import os
import argparse
import csv
import docx
from bs4 import UnicodeDammit

def csv_stringsearch(input_file, input_string):
    with open(input_file) as file:
        for row in csv.reader(file):
            for column in row:
                if input_string in column.lower():
                    return True
    return False

def MSDocx_stringsearch(input_file, input_string):
    doc = docx.Document(input_file)
    for paragraph in doc.paragraphs:
        if input_string in paragraph.text.lower():
            return True
    return False

def text_stringsearch(input_file, input_string):
    with open(input_file, 'rb') as file:
        content = file.read(1024)
        guessencoding = UnicodeDammit(content)
        encoding = guessencoding.original_encoding
    with open(input_file, encoding=encoding) as file:
        for line in file:
            if input_string in line.lower():
                return True
    return False

def main(input_string):
    for root, dirs, files in os.walk('.'):
        for file in files:
            extension = file.split('.')[-1]
            if extension in function_mapping:
                search_file = function_mapping.get(extension)
                full_file_path = os.path.join(root, file)
                if search_file(full_file_path, input_string):
                    print(f' *** Yeah String found in {full_file_path}')

function_mapping = {
    'csv': csv_stringsearch,
    'txt': text_stringsearch,
    'docx': MSDocx_stringsearch,
}

if __name__ == '__main__':
    string_to_search = 'Hello'
    print(f'Output \n')
    main(string_to_search.lower())

আউটপুট

*** Yeah String found in .\Hello_World.docx
*** Yeah String found in .\My_Amazing_WordDoc.docx

৭. কমান্ড লাইন এক্সিকিউশনের জন্য argparse ব্যবহার

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-s', type=str, help='Input string to search', default='Hello')
    args = parser.parse_args()
    main(args.s.lower())
  1. ওয়ার্ড ডকুমেন্ট রিকভার করার পদ্ধতি

  2. পাইথনে পান্ডাস ডেটাফ্রেম CSV ফাইলে লেখার পদ্ধতি

  3. পাইথনে স্ট্রিং-এ নির্দিষ্ট ক্যারেক্টার সκαν করা

  4. পাইথনে স্ট্রিং এবং সংখ্যা কনক্যাটেনেট করা