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):


--- 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.

9 Years
Discussion Span
Last Post by The_Kernel

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.

f = open(infile,'r')
o = open(outfile,'w')
ctr = 1

for line in f:
   if first <= ctr <= last:
   ctr += 1


There's always a more clever way :-)

start = 10
end = 20

open(outfile, 'w').writelines(open(infile).readlines()[start:end])
Votes + Comments
clever indeed, thanks
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.