मैं पिछले 7 दिनों के आउटलुक ईमेल की गणना करना चाहता हूं जिसमें त्रुटि प्रकार के साथ-साथ सर्वर नाम भी हो। मैं पायथन कोडिंग के लिए नया हूँ। क्या कोई इस पर मदद कर सकता है?

उदाहरण के लिए: - मेरे पास मेरे इनबॉक्स में विषय पंक्ति के रूप में मेल हैं:

  1. CP-TEST-DB2 पर गुम बैकअप की जाँच करें
  2. G-PROD-AUDB पर गतिरोध की जाँच करें
  3. LF-PTT-DW1 पर SQL त्रुटि लॉग में त्रुटियाँ हैं
  4. CP-TEST-DB1 पर ड्राइव स्पेस चेक करें

इसलिए, मैं प्रत्येक सर्वर (जैसे- CP-TEST-DB2, G-PROD-AUDB) के लिए विषय पंक्ति 'लापता बैकअप के लिए जाँच' के साथ मेल लाना चाहता हूँ और उस पर सर्वर के अनुसार गिनती करना चाहता हूँ। जैसे मेरे पास "CP-TEST-DB2" सर्वर के लिए कितने "चेक फॉर मिसिंग बैकअप ऑन" मेल हैं। मेरे पास "G-PROD-AUDB" के लिए कितने "लापता बैकअप के लिए जाँच करें" मेल हैं और इसी तरह प्रत्येक सर्वर के लिए।

मेरे पास "CP-TEST-DB2" सर्वर के लिए कितने "चेक डेडलॉक ऑन" मेल हैं। मेरे पास "जी-प्रोड-एयूडीबी" के लिए कितने "चेक डेडलॉक ऑन" मेल हैं और इसी तरह प्रत्येक सर्वर के लिए ... और इसी तरह त्रुटि प्रकार के लिए भी। मेरे पास प्रत्येक 33 सर्वर के लिए 8 प्रकार की sql त्रुटि अलर्ट मेल है?

import win32com.client
import imp, sys, os, re
import datetime as dt
import time

date_time = dt.datetime.now()
print (date_time)

#list of errors
error = ['There are errors in the SQL Error Log on', 'Check for missing backups on', 'Check drive space on', 'Check memory usage on', 'Check deadlock on ']

#list of server
server = ['TEST-AUDB','TEST-AUDB','EUDB','TEST-EUDB','PROD-AUDB','PROD-EUDB']

#setup range for outlook to search emails (so we don't go through the entire inbox)
lastHourDateTime = dt.datetime.now() - dt.timedelta(days = 7)
#print (lastHourDateTime)

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.Folders.Item(2).Folders['Inbox']

messages = inbox.Items
messages.sort("[ReceivedTime]", True)
lastHourMessages = messages.Restrict("[ReceivedTime] >= '" +lastHourDateTime.strftime('%m/%d/%Y %H:%M %p')+"'")
print ("Current time: "+date_time.strftime('%m/%d/%Y %H:%M %p'))

for msg in lastHourMessages:
        subject = msg.Subject
        time = msg.ReceivedTime
        print (s1)```




1
Bhupesh Pradhan 19 फरवरी 2020, 16:05
अरे, कुछ बातें। सबसे पहले, स्टैक ओवरफ्लो में आपका स्वागत है। दूसरा, आपका प्रश्न मेरी मदद करने के लिए पर्याप्त स्पष्ट नहीं है, तो क्या आप प्रश्न को संपादित कर सकते हैं और इसे थोड़ा बेहतर तरीके से समझाने का प्रयास कर सकते हैं? साथ ही, प्रश्न पाठ में उदाहरण और त्रुटियां कोड में दिए गए उदाहरणों से मेल नहीं खातीं।
 – 
João Amaro
19 फरवरी 2020, 16:13
मैंने उदाहरण के साथ समझाया है। कृपया मुझे बताएं कि क्या यह आपके लिए काम करता है।
 – 
Bhupesh Pradhan
19 फरवरी 2020, 19:28
आपकी मदद के लिए धन्यवाद जोआओ अमारो।
 – 
Bhupesh Pradhan
20 फरवरी 2020, 10:12
अगर मेरे उत्तर ने आपकी समस्या का समाधान किया है, तो उत्तर को स्वीकार करना अच्छा अभ्यास है, जो मेरे प्रतिनिधि को जोड़ देगा और मुझे दूसरों की मदद करने में मदद करेगा।
 – 
João Amaro
20 फरवरी 2020, 11:21

1 उत्तर

सबसे बढ़िया उत्तर

आप निम्न रेगेक्स अभिव्यक्ति का उपयोग कर सकते हैं:

([\-A-Z0-9]+)$

जो वाक्य के अंत तक प्रत्येक अपर केस लेटर, नंबर और डैश के 1 या अधिक से मेल खाएगा। इसमें आपके द्वारा अपने प्रश्न में दिए गए सभी मामले शामिल हैं, जैसा कि यहां देखा जा सकता है।

इसके बाद, आप re मॉड्यूल का उपयोग कर सकते हैं, और स्ट्रिंग्स की सूची पर पुनरावृति कर सकते हैं, ऊपर बताए गए पैटर्न का उपयोग करके एक मैच की खोज कर सकते हैं, और एक नेस्टेड शब्दकोश में जानकारी संग्रहीत कर सकते हैं।

import re

# Example strings
strings = ["Check for missing backups on CP-TEST-DB2",
            "Check deadlock on CP-TEST-DB2",
            "Check deadlock on CP-TEST-DB2",
            "Check deadlock on G-PROD-AUDB",
            "There are errors in the SQL Error Log on LF-PTT-DW1",
            "Check drive space on CP-TEST-DB1"]

# Declare empty dictionary
occurrences = {}

# Iterate over all the examples
for string in strings:
    results = re.search('([\-A-Z0-9]+)$', string)
    # Get the server from the regex match
    server = results.group(0)
    # Remove the server from the string and use strip to get rid of the trailing whitespace
    instance = string.replace(server, '').strip()
    # If the server is still not in the dict, insert it manually
    if occurrences.get(server, None) is None:
        occurrences[server] = {instance: 1}
    # If the server is already in the dict, but not the instance, create the key and initial value for the instance
    elif occurrences[server].get(instance, None) is None:
        occurrences[server][instance] = 1
    # Otherwise, just increment the value for the server-instance pair
    else:
        occurrences[server].update({instance : occurrences[server].get(instance, 0) + 1})
print(occurrences)

उम्मीद है ये मदद करेगा!

1
João Amaro 19 फरवरी 2020, 20:27