সমস্যা
ধরুন আপনার একটি ডিরেক্টরিতে বিভিন্ন ফরম্যাটের ফাইল আছে, যেখানে একটি নির্দিষ্ট কীওয়ার্ড খুঁজে বের করতে হবে।
প্রস্তুতি
নিচের প্যাকেজগুলো ইনস্টল করুন:
- beautifulsoup4
- 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())