समस्या
मान लीजिए आपके पास विभिन्न फॉर्मेट की फाइलों से भरा एक डायरेक्टरी है, जिसमें किसी विशेष कीवर्ड को खोजना है।
तैयारी
निम्नलिखित पैकेज इंस्टॉल करें:
- beautifulsoup4
- python-docx
कैसे करें
1. 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
2. टेक्स्ट फाइल में स्ट्रिंग खोजने के लिए फंक्शन
यह थोड़ा मुश्किल है क्योंकि हमें एन्कोडिंग से निपटना पड़ता है। हजारों एन्कोडिंग हैं और एन्कोडिंग फॉर्मेट निर्धारित करना शायद सबसे कठिन हिस्सा है। हम 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
3. 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
4. मेन फंक्शन - फाइलों के माध्यम से लूप करें
यहां मैं मान लेता हूं कि कोड और खोजी जाने वाली इनपुट फाइलें एक ही डायरेक्टरी में हैं।
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}')
5. फंक्शन्स को फाइल एक्सटेंशन से मैप करने के लिए डिक्शनरी बनाएं
function_mapping = {
'csv': csv_stringsearch,
'txt': text_stringsearch,
'docx': MSDocx_stringsearch,
}
6. पूरा कोड एक साथ
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())
7. कमांड लाइन एक्जीक्यूशन के लिए 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())