পরিচয়...
স্ট্রাকচার্ড স্ট্রিং থেকে প্রয়োজনীয় ডেটা/ক্ষেত্র বের করার জন্য আমি আপনাকে কয়েকটি পদ্ধতি দেখাব। এই পদ্ধতিগুলি সাহায্য করবে, যেখানে ইনপুট কাঠামোর বিন্যাস একটি পরিচিত বিন্যাসে রয়েছে।
কিভাবে করবেন..
1. পদ্ধতিটি বোঝার জন্য আসুন একটি ডামি বিন্যাস তৈরি করি৷
Report: <> - Time: <> - Player: <> - Titles: - Country: <>
রিপোর্ট:Daily_Report - সময়: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. এখন আউটপুট আশানুরূপ নয় যেমন আমরা এখনও কিছু লেবেল দেখতে পাচ্ছি যেমন Report:, Time:, Player:যার প্রয়োজন নেই।
# 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. আমরা এটিকে কিছুটা সহজ করতে পার্স মডিউল ব্যবহার করতে পারি। আপনি ফর্ম্যাট দেখতে একটি টেমপ্লেট তৈরি করুন. এটিকে আরও সহজে করতে আমরা পার্স মডিউল ব্যবহার করতে পারি।
প্রথমে পার্স মডিউল ইনস্টল করুন - 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
উপসংহার :
লগ ফাইল থেকে প্রয়োজনীয় ডেটা পার্স করার জন্য আপনি কয়েকটি পদ্ধতি দেখেছেন। টেমপ্লেট সংজ্ঞায়িত করতে পছন্দ করুন এবং প্রয়োজনীয় ডেটা বের করতে পার্স মডিউল ব্যবহার করুন।