में शब्दकोशों की सूची में कुंजियों के मूल्यों को कुंजी के मान जोड़ें और इसे क्रमबद्ध करें मैं वास्तव में पाइथन के लिए नया हूं और मैं नीचे की समस्या से फंस गया हूं जिसे मुझे हल करने की आवश्यकता है। मैं नीचे के रूप में अपाचे लॉग से एक लॉग फ़ाइल है:पाइथन
[01/Aug/1995:00:54:59 -0400] "GET /images/opf-logo.gif HTTP/1.0" 200 32511
[01/Aug/1995:00:55:04 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635
[01/Aug/1995:00:55:06 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 403 298
[01/Aug/1995:00:55:09 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635
[01/Aug/1995:00:55:18 -0400] "GET /images/opf-logo.gif HTTP/1.0" 200 32511
[01/Aug/1995:00:56:52 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635
मैं 10 सबसे अनुरोध किया वस्तुओं और उनकी संचयी बाइट्स स्थानांतरित कर वापस जाने के लिए है। मुझे सफल (HTTP 2xx) प्रतिक्रियाओं के साथ केवल GET अनुरोधों को शामिल करने की आवश्यकता है।
तो ऊपर लॉग परिणाम होगा में:
/images/ksclogosmall.gif 10905
/images/opf-logo.gif 65022
अब तक मैं निम्नलिखित कोड है:
import re
from collections import Counter, defaultdict
from operator import itemgetter
import itertools
import sys
log_file = "web.log"
pattern = re.compile(
r'\[(?P<date>[^\[\]:]+):(?P<time>\d+:\d+:\d+) (?P<timezone>[\-+]?\d\d\d\d)\] '
+ r'"(?P<method>\w+) (?P<path>[\S]+) (?P<protocol>[^"]+)" (?P<status>\d+) (?P<bytes_xfd>-|\d+)')
dict_list = []
with open(log_file, "r") as f:
for line in f.readlines():
if re.search("GET", line) and re.search(r'HTTP/[\d.]+"\s[2]\d{2}', line):
try:
log_line_data = pattern.match(line)
path = log_line_data["path"]
bytes_transferred = int(log_line_data["bytes_xfd"])
dict_list.append({path: bytes_transferred})
except:
print("Unexpected Error: ", sys.exc_info()[0])
raise
f.close()
print(dict_list)
इस कोड शब्दकोश की निम्न सूची प्रिंट करता है।
/images/ksclogosmall.gif 10905
/images/opf-logo.gif 65022
इस परिणाम मूल रूप से कई बार विशेष कुंजी हुआ की संख्या द्वारा सॉर्ट समान चाबियाँ करने के लिए संगत मानों के अलावा है:
[{'/images/opf-logo.gif': 32511},
{'/images/ksclogosmall.gif': 3635},
{'/images/ksclogosmall.gif': 3635},
{'/images/opf-logo.gif': 32511},
{'/images/ksclogosmall.gif': 3635}]
मैं यहाँ से जाने के लिए कैसे परिणाम प्राप्त करने के रूप में नहीं जानते एक क्रम क्रम में।
नोट: मैंने colllections.Counter का उपयोग करने का प्रयास किया, कोई फायदा नहीं हुआ, यहां मैं कुंजी की संख्या के अनुसार क्रमबद्ध करना चाहता हूं।
किसी भी मदद की सराहना की जाएगी।
मैं इस जोड़ने की कोशिश की है मौजूद हैं, लेकिन यह क नहीं है मुझे जरूरत है मुझे किसी विशेष कुंजी के समय की शब्दकोशों की सूची को क्रमबद्ध करने की आवश्यकता है और साथ ही साथ उनके मान भी जोड़े जाएंगे और अंतिम आउटपुट निम्नतम से निम्नतम होगा: /images/ksclogosmall.gif 10905 /छवियां/opf -logo.gif 65022 –
ठीक है, मैंने अपना जवाब अपडेट कर दिया है। – Imran
फिर भी वही, यह मानों द्वारा क्रमबद्ध है। मैं इसे किसी विशेष कुंजी के समय से क्रमबद्ध करना चाहता हूं, भले ही '/images/opf-logo.gif' कुंजी से संबंधित मान 65022 है, जैसा कि '/images/ksclogosmall.gif' के मान की तुलना में 10905 है , यह अभी भी शीर्ष पर होना चाहिए क्योंकि कुंजी '/images/ksclogosmall.gif' शब्दकोषों की सूची में 3 बार हुआ था, जो कि केवल दो बार हुआ था। किसी भी भ्रम के बारे में खेद है, मैं वास्तव में कुछ समय के लिए इस भाग पर वास्तव में अटक गया हूँ। –