परिचय...
मैं आपको संरचित स्ट्रिंग्स से आवश्यक डेटा/फ़ील्ड निकालने के लिए कुछ तरीके दिखाऊंगा। ये दृष्टिकोण मदद करेंगे, जहां इनपुट संरचना का प्रारूप ज्ञात प्रारूप में है।
इसे कैसे करें..
1. आइए दृष्टिकोण को समझने के लिए एक डमी प्रारूप बनाएं।
Report: <> - Time: <> - Player: <> - Titles: - Country: <>
रिपोर्ट:डेली_रिपोर्ट - समय:2020-10-16T01:01:01.000001 - खिलाड़ी:फेडरर - शीर्षक:20 - देश:स्विट्ज़रलैंड
report = 'Report: Daily_Report - Time: 2020-10-10T12:30:59.000000 - Player: Federer - Titles: 20 - Country: Switzerland'
2. रिपोर्ट से मैंने जो पहली चीज देखी, वह है सेपरेटर जो "-" है। हम आगे बढ़ेंगे और रिपोर्ट को "-" के साथ पार्स करेंगे
fields = report.split(' - ') name, time, player , titles, _ = fields print(f"Output \n *** The report name {name} generated on {time} has {titles} titles for {player}. ")
आउटपुट
*** The report name Report: Daily_Report generated on Time: 2020-10-10T12:30:59.000000 has Titles: 20 titles for Player: Federer.
3. अब आउटपुट अपेक्षित नहीं है क्योंकि हम अभी भी कुछ लेबल देख सकते हैं जैसे रिपोर्ट:, टाइम:, प्लेयर:जिनकी आवश्यकता नहीं है।
# extract only report name formatted_name = name.split(':')[1] # extract only player formatted_player = player.split(':')[1] # extract only titles formatted_titles = int(titles.split(':')[1]) # extract only titles new_time = time.split(': ')[1] print(f"Output \n {formatted_name} , {new_time}, {formatted_player} , {formatted_titles}")
आउटपुट
Daily_Report , 2020-10-10T12:30:59.000000, Federer , 20
4. अब टाइमस्टैम्प आईएसओ प्रारूप में है, जिसे आप चाहें तो विभाजित कर सकते हैं या इसे वैसे ही छोड़ सकते हैं। मैं आपको दिखाता हूँ कि आप टाइमस्टैम्प फ़ील्ड को कैसे विभाजित कर सकते हैं।
from datetime import datetime formatted_date = datetime.fromisoformat(new_time) print(f"Output \n{formatted_date}")
आउटपुट
2020-10-10 12:30:59
-
अब हम इन सभी चरणों को एक ही फ़ंक्शन में जोड़ देंगे।
def parse_function(log): """ Function : Parse the given log in the format Report: <> - Time: <> - Player: <> - Titles: - Country: <> Args : log Return : required data """ fields = log.split(' - ') name, time, player , titles, _ = fields # extract only report name formatted_name = name.split(':')[1] # extract only player formatted_player = player.split(':')[1] # extract only titles formatted_titles = int(titles.split(':')[1]) # extract only titles new_time = time.split(': ')[1] return f"{formatted_name} , {new_time}, {formatted_player} , {formatted_titles}" if __name__ == '__main__': report = 'Report: Daily_Report - Time: 2020-10-10T12:30:59.000000 - Player: Federer - Titles: 20 - Country: Switzerland' data = parse_function(report) print(f"Output \n{data}")
आउटपुट
Daily_Report , 2020-10-10T12:30:59.000000, Federer , 20
6. इसे थोड़ा आसान बनाने के लिए हम parse मॉड्यूल का उपयोग कर सकते हैं। जैसा कि आप देखते हैं कि प्रारूप एक टेम्पलेट बनाता है। इसे और आसानी से करने के लिए हम पार्स मॉड्यूल का उपयोग कर सकते हैं।
सबसे पहले पार्स मॉड्यूल को इनस्टॉल करें - pip install parse
from parse import parse report = 'Report: Daily_Report - Time: 2020-10-10T12:30:59.000000 - Player: Federer - Titles: 20 - Country: Switzerland' # Looking at the report, create a template template = 'Report: {name} - Time: {time} - Player: {player} - Titles: {titles} - Country: {country}' # Run parse and check the results data = parse(template, report) print(f"Output \n{data}")
आउटपुट
<Result () {'name': 'Daily_Report', 'time': '2020-10-10T12:30:59.000000', 'player': 'Federer', 'titles': '20', 'country': 'Switzerland'}>
7. एक साधारण एक लाइनर के साथ हम टेम्पलेट को परिभाषित करके लॉग से डेटा निकालने में सक्षम हैं। अब हम अलग-अलग मान निकालते हैं।
print(f"Output \n {data['name']} - {data['time']} - {data['player']} - {data['titles']} - {data['country']}")
आउटपुट
Daily_Report - 2020-10-10T12:30:59.000000 - Federer - 20 - Switzerland
निष्कर्ष :
आपने लॉग फ़ाइल से आवश्यक डेटा को पार्स करने के लिए कुछ विधियों को देखा है। टेम्प्लेट को परिभाषित करना पसंद करें और आवश्यक डेटा निकालने के लिए पार्स मॉड्यूल का उपयोग करें।