Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में एकाधिक डॉक्यूमेंट फॉर्मेट (CSV, टेक्स्ट, MS Word) में स्ट्रिंग कैसे खोजें

समस्या

मान लीजिए आपके पास विभिन्न फॉर्मेट की फाइलों से भरा एक डायरेक्टरी है, जिसमें किसी विशेष कीवर्ड को खोजना है।

तैयारी

निम्नलिखित पैकेज इंस्टॉल करें:

  1. beautifulsoup4
  2. 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())
  1. वर्ड डॉक्यूमेंट कैसे रिकवर करें वर्ड डॉक्यूमेंट कैसे रिकवर करें

    आपने एक डॉक्यूमेंट लिखने में घंटों बिताए और फिर, अचानक, आपका पीसी क्रैश हो गया। हजारों शब्द, घंटों की मेहनत: एक पल में चली गई। दुर्भाग्य से, यह एक पूरी तरह से संभव परिदृश्य है जो कभी-कभी तब हो सकता है जब आप माइक्रोसॉफ्ट वर्ड डॉक्यूमेंट लिख या संपादित कर रहे हों, खासकर यदि आपने अपनी फ़ाइल सहेजी नहीं

  1. पायथन में पैंडास DataFrame को CSV फ़ाइल में कैसे लिखें पायथन में पैंडास DataFrame को CSV फ़ाइल में कैसे लिखें

    पायथन में पैंडास DataFrame को CSV फ़ाइल में लिखने के लिए to_csv() विधि का उपयोग करें। सबसे पहले, आइए सूचियों का एक शब्दकोश बनाएं:# सूचियों का शब्दकोश d = {Car: [BMW, Lexus, Audi, Mercedes, Jaguar, Bentley], Date_of_purchase: [2020-10-10, 2020-10-12, 2020-10-17, 2020-10-16, 2020-10-19, 2020-10-2

  1. - पायथन में मल्टीपल डिलीमीटर्स के साथ स्ट्रिंग को कैसे तोड़ें?

    हम re.split(delimiter, str) मेथड का उपयोग करके मल्टीपल डिलीमीटर्स के साथ स्ट्रिंग को तोड़ सकते हैं। यह डिलीमीटर्स का एक रेगेक्स और वह स्ट्रिंग लेता है जिसे हमें विभाजित करने की आवश्यकता है। उदाहरण के लिए: a=Beautiful, is; better*than\nugly import re print(re.split(; |, |\*|\n, a)) हमें आउटपुट मिलता