Is there a clever way to do this?

Please support our Python advertiser: Programming Forums - DaniWeb Sister Site
Thread Solved

Join Date: May 2009
Posts: 70
Reputation: shoemoodoshaloo is an unknown quantity at this point 
Solved Threads: 2
shoemoodoshaloo shoemoodoshaloo is offline Offline
Junior Poster in Training

Is there a clever way to do this?

 
0
  #1
May 20th, 2009
Hey guys,

I'm new to python so if this is a silly question, pardon me.

I have the following basic assignment:

Take a user-specified range of lines from some data file, call it input, and write them to an output data file. What I want to do is have the user specify the range (for example lines 10-20) that will be picked from the input file to the output file. I am trying to use readlines() and I am able to get the program to pick a certain number of lines, but it always begins as line 1. For example, if I specify lines (30-200) it will recognize that it must extract 170 lines from the input file; however, it starts at line 1 and runs to line 170 instead of starting at line 30. Here is a snipet of the code:

first = int(raw_input('Enter a starting value'))
last = int(raw_input('Enter a final value'))

def add_line_numbers(infile, outfile):
f = open(infile,'r')
o = open(outfile,'w')
i = 1


for i in range(first, last):
o.write(str(i)+'\t'+f.readline())


f.close()
o.close()


--- Parsing code follows


The code originally worked fine until I began editing it. The original code takes an entire input file and transfers it to an entire output file. So only my edits are in question.

The 'i' acts as a counter, and that part works fine. The counter will read 30-200 for example; however, the lines that are inputing are still 1-170 from the original data type.

As I said, I am new to python and very amenable to suggestions so if you have a smarter way to tackled this problem, I am all ears.

This has been a very frustrating process. I'd appreciate help so much.
Reply With Quote Quick reply to this message  
Join Date: Dec 2006
Posts: 1,028
Reputation: woooee is a jewel in the rough woooee is a jewel in the rough woooee is a jewel in the rough 
Solved Threads: 290
woooee woooee is offline Offline
Veteran Poster

Re: Is there a clever way to do this?

 
0
  #2
May 20th, 2009
You read it one line at a time, but write only if the counter is between the numbers. And don't use "i", "l", or "o" as single variables because they look too much like numbers.
  1. f = open(infile,'r')
  2. o = open(outfile,'w')
  3. ctr = 1
  4.  
  5. for line in f:
  6. if first <= ctr <= last:
  7. o.write(str(ctr)+'\t'+line)
  8. ctr += 1
  9.  
  10. f.close()
  11. o.close()
Last edited by woooee; May 20th, 2009 at 9:50 pm.
Reply With Quote Quick reply to this message  
Join Date: May 2009
Posts: 70
Reputation: shoemoodoshaloo is an unknown quantity at this point 
Solved Threads: 2
shoemoodoshaloo shoemoodoshaloo is offline Offline
Junior Poster in Training

Re: Is there a clever way to do this?

 
0
  #3
May 21st, 2009
Thanks very much for your help.
Reply With Quote Quick reply to this message  
Join Date: May 2009
Posts: 25
Reputation: The_Kernel is an unknown quantity at this point 
Solved Threads: 8
The_Kernel The_Kernel is offline Offline
Light Poster

Re: Is there a clever way to do this?

 
1
  #4
May 21st, 2009
There's always a more clever way :-)
  1. start = 10
  2. end = 20
  3.  
  4. open(outfile, 'w').writelines(open(infile).readlines()[start:end])
Reply With Quote Quick reply to this message  
Reply

This thread has been marked solved.
Perhaps start a new thread instead?
Message:


Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC