The Shed is going Social! Join us on FaceBook and Twitter and chime in on the conversation.
|
 |
|
Dev Shed Forums
> Programming Languages
> Python Programming
|
split lines
Discuss split lines in the Python Programming forum on Dev Shed. split lines Python Programming forum discussing coding techniques, tips and tricks, and Zope related information. Python was designed from the ground up to be a completely object-oriented programming language.
|
|
 |
|
|
|
|

Dev Shed Forums Sponsor:
|
|
|

January 14th, 2004, 05:17 AM
|
|
Registered User
|
|
Join Date: Jan 2004
Posts: 4
Time spent in forums: 11 m 40 sec
Reputation Power: 0
|
|
|
split lines
I am reading in a log file in the following format:
64.68.82.38 - - [16/Nov/2003:08:17:57 +0000] "GET /pipermail/gm2/2003-September/author.html HTTP/1.0" 200 4537
and i am trying to count the number of accesses to the file pipermail
Code:
def ProcessLine ()
count = 0
for line in open(logfile.data).readlines():
words = string.split(line)
space = string.split(words[6],' ')
line = string.split('/')
site = space[0]
print 'Filename:', site
if site == 'pipermail':
count += 1
print 'No. of accesses in pipermail:',count
this code displays all the files but it only gives a count of 0 which is obviously wrong.
Edit: Added [ code ] tags, this way you're code will maintain its indentation; very important in Python 
Last edited by netytan : January 14th, 2004 at 07:55 AM.
|

January 14th, 2004, 08:28 AM
|
 |
Hello World :)
|
|
Join Date: Mar 2003
Location: Hull, UK
|
|
Ok, the problem here is that site is never 'pipermail' so count never becomes more than 0
What you need to do is check if site starts with '/pipermail/', where i could've fixed your function it just seemed easier to just start over...
Code:
#!/usr/bin/env python
def processline():
count = 0
for line in open('test.txt', 'r'):
words = line.split()
words = words[6]
print 'Filename:', words
if words.startswith('/pipermail/'):
count = count + 1
print 'No. of accesses in pipermail:', count
if __name__ == '__main__':
processline()
another thing i knowticed, you're fuction would also cause a SyntaxError because theres no ':' after you define your function
Edit: fixed the typo in the shebang
Mark.
__________________
programming language development: www.netytan.com – Hula
Last edited by netytan : January 14th, 2004 at 03:20 PM.
|

January 14th, 2004, 11:32 AM
|
 |
Banned ;)
|
|
Join Date: Nov 2001
Location: Woodland Hills, Los Angeles County, California, USA
|
|
|
You have a minor typo too netytan. Your first line reads:
#!/usr/bun/env python
__________________
Up the Irons
What Would Jimi Do? Smash amps. Burn guitar. Take the groupies home.
"Death Before Dishonour, my Friends!!" - Bruce D ickinson, Iron Maiden Aug 20, 2005 @ OzzFest
Down with Sharon Osbourne
|

January 14th, 2004, 03:26 PM
|
 |
Hello World :)
|
|
Join Date: Mar 2003
Location: Hull, UK
|
|
Thanks Scorpi  , the thing about windows, it runs regardless so its hard to debug little things like that  ... We'll spotted!
Mark.
|

January 19th, 2004, 07:29 AM
|
|
Registered User
|
|
Join Date: Jan 2004
Posts: 4
Time spent in forums: 11 m 40 sec
Reputation Power: 0
|
|
|
logfile help
Code:
#!/usr/bin/python
import sys, string, getopt
def count_lines ():
linecount = 0
logfile = opt[1]
for line in open(logfile).readlines():
linecount = linecount + 1
print "accesses:", linecount
def processline ():
count = 0
total = 0
logfile = opt[1]
for line in open(logfile).readlines():
words = string.split(line)
words = words[6]
total = total + 1
if words.startswith('/pipermail'):
count = count + 1
percentage = count * 100 / total
print 'Accesses directory:',count,'(',percentage,'%)'
try:
optlist, list = getopt.getopt(sys.argv[1:], ':p:f:')
except getopt.GetoptError:
Usage()
print "called exception"
sys.exit(2)
for opt in optlist
if opt[0] == '-p':
processline()
if opt[0] == '-f':
count_lines()
when this code is run in a terminal using the following options:
./python.py -f access.data -p access.data
i get the following output:
accesses: 6
Accesses directory: 3 ( 50% )
but instead of putting the filename after the -p option i would like to be able to put in a directory name such as:
/pipermail or,
/Glamorgan
and then the output would display the number of access to that specific director and not the whole file.
The logfile which I am processing contains the following data (just a sample as it contains many entries some with /pipermail and somewith /Glamorgan)
213.1.145.506 --{12/Dec/2002:07:41:19 +0000} " GET /pipermail/notes/web/m2f.html HTTP/1.0" 301 -
|
Developer Shed Advertisers and Affiliates
| Thread Tools |
Search this Thread |
|
|
|
| Display Modes |
Rate This Thread |
Linear Mode
|
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
|
|