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.

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:
      o.write(str(ctr)+'\t'+line)
   ctr += 1

f.close()
o.close()

Thanks very much for your help.

There's always a more clever way :-)

start = 10
end = 20

open(outfile, 'w').writelines(open(infile).readlines()[start:end])
commented: clever indeed, thanks +12
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.