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.

7 Years
Discussion Span
Last Post by The_Kernel
Featured Replies
  • There's always a more clever way :-) [CODE] start = 10 end = 20 open(outfile, 'w').writelines(open(infile).readlines()[start:end]) [/CODE] Read More


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])
clever indeed, thanks
This question has already been answered. Start a new discussion instead.
Take the time to help us to help you. Please be thoughtful and detailed and be sure to adhere to our posting rules.