[Q] How to ignore the first line of the text read from a file

Y

youngjin.michael

Hello,

I am new to Python and have one simple question to which I cannot find
a satisfactory solution.
I want to read text line-by-line from a text file, but want to ignore
only the first line. I know how to do it in Java (Java has been my
primary language for the last couple of years) and following is what I
have in Python, but I don't like it and want to learn the better way
of doing it.

file = open(fileName, 'r')
lineNumber = 0
for line in file:
if lineNumber == 0:
lineNumber = lineNumber + 1
else:
lineNumber = lineNumber + 1
print line

Can anyone show me the better of doing this kind of task?

Thanks in advance.
 
M

Marc 'BlackJack' Rintsch

I want to read text line-by-line from a text file, but want to ignore
only the first line. I know how to do it in Java (Java has been my
primary language for the last couple of years) and following is what I
have in Python, but I don't like it and want to learn the better way of
doing it.

file = open(fileName, 'r')
lineNumber = 0
for line in file:
if lineNumber == 0:
lineNumber = lineNumber + 1
else:
lineNumber = lineNumber + 1
print line

Can anyone show me the better of doing this kind of task?

input_file = open(filename)
lines = iter(input_file)
lines.next() # Skip line.
for line in lines:
print line
input_file.close()

Ciao,
Marc 'BlackJack' Rintsch
 
C

Chris

Hello,

I am new to Python and have one simple question to which I cannot find
a satisfactory solution.
I want to read text line-by-line from a text file, but want to ignore
only the first line. I know how to do it in Java (Java has been my
primary language for the last couple of years) and following is what I
have in Python, but I don't like it and want to learn the better way
of doing it.

file = open(fileName, 'r')
lineNumber = 0
for line in file:
    if lineNumber == 0:
        lineNumber = lineNumber + 1
    else:
        lineNumber = lineNumber + 1
        print line

Can anyone show me the better of doing this kind of task?

Thanks in advance.

fileInput = open(filename, 'r')
for lnNum, line in enumerate(fileInput):
if not lnNum:
continue
print line
 
S

Santiago Romero

I want to read text line-by-line from a text file, but want to ignore
only the first line. I know how to do it in Java (Java has been my
primary language for the last couple of years) and following is what I
have in Python, but I don't like it and want to learn the better way
of doing it.

Why don't you read and discard the first line before processing the
rest of the file?

file = open(filename, 'r')
file.readline()
for line in file: print line,

(It works).
 
K

Ken Starks

Hello,

I am new to Python and have one simple question to which I cannot find
a satisfactory solution.
I want to read text line-by-line from a text file, but want to ignore
only the first line. I know how to do it in Java (Java has been my
primary language for the last couple of years) and following is what I
have in Python, but I don't like it and want to learn the better way
of doing it.

file = open(fileName, 'r')
lineNumber = 0
for line in file:
if lineNumber == 0:
lineNumber = lineNumber + 1
else:
lineNumber = lineNumber + 1
print line

Can anyone show me the better of doing this kind of task?

Thanks in advance.

LineList=open(filename,'r').readlines()[1,]
for line in Linelist:
blah blah
 
P

Paul Rubin

Ken Starks said:
LineList=open(filename,'r').readlines()[1,]

You don't want to do that if the file is very large. Also,
you meant [1:] rather than [1,]
 
C

Chris

I am new to Python and have one simple question to which I cannot find
a satisfactory solution.
I want to read text line-by-line from a text file, but want to ignore
only the first line. I know how to do it in Java (Java has been my
primary language for the last couple of years) and following is what I
have in Python, but I don't like it and want to learn the better way
of doing it.
file = open(fileName, 'r')
lineNumber = 0
for line in file:
    if lineNumber == 0:
        lineNumber = lineNumber + 1
    else:
        lineNumber = lineNumber + 1
        print line
Can anyone show me the better of doing this kind of task?
Thanks in advance.

LineList=open(filename,'r').readlines()[1,]
for line in Linelist:
    blah blah

That's bad practice as you load the entire file in memory first as
well as it will result in a type error (should be '.readlines()[1:]')
 
R

rurpy

input_file = open(filename)
lines = iter(input_file)
lines.next() # Skip line.
for line in lines:
print line
input_file.close()

Ciao,
Marc 'BlackJack' Rintsch

A file object is its own iterator so you can
do more simply:

input_file = open(filename)
input_file.next() # Skip line.
for line in input_file:
print line,
input_file.close()

Since the line read includes the terminating
EOL character(s), print it with a "print ... ,"
to avoid adding an additional EOL.

If the OP needs line numbers elsewhere in the
code something like the following would work.

infile = open(fileName, 'r')
for lineNumber, line in enumerate (infile):
# enumerate returns numbers starting with 0.
if lineNumber == 0: continue
print line,
 
P

Paul Rubin

If the OP needs line numbers elsewhere in the
code something like the following would work.

infile = open(fileName, 'r')
for lineNumber, line in enumerate (infile):
# enumerate returns numbers starting with 0.
if lineNumber == 0: continue
print line,

This also seems like a good time to mention (untested):

from itertools import islice

for line in islice(infile, 1, None):
print line,
 
N

norseman

Benjamin said:
On Thu, Aug 28, 2008 at 12:11 AM, (e-mail address removed) <



Files are iterators, and iterators can only go through the object once. Just
call next() before going in the for loop. Also, don't use "file" as a
variable name. It covers up the built-in type.

afile = open(file_name, 'r')
afile.next() #just reads the first line and doesn't do anything with it
for line in afile :
print line

==================
actually:
import os

file = open(filename, 'r')
for line in file:
dummy=line
for line in file:
print line


is cleaner and faster.
If you need line numbers, pre-parse things, whatever, add where needed.

Steve
(e-mail address removed)
 
M

Marc 'BlackJack' Rintsch

==================
actually:
import os

file = open(filename, 'r')
for line in file:
dummy=line
for line in file:
print line


is cleaner and faster.

That's not cleaner, that's a 'WTF?'! A ``for`` line over `file` that
does *not* iterate over the file but is just there to skip the first line
and a completely useless `dummy` name. That's seriously ugly and
confusing.

Ciao,
Marc 'BlackJack' Rintsch
 
T

Terry Reedy

Santiago said:
Why don't you read and discard the first line before processing the
rest of the file?

file = open(filename, 'r')
file.readline()
for line in file: print line,

I believe that file.readline() will work better than file.next() for
most purposes since the latter will raise StopIteration on an empty file
whereas file.readline() merely returns ''.
 
S

Steven D'Aprano

Nice to see someone else was as, uhm, offended by that code sample
as I was -- I just lacked the vocabulary to put it across cleanly, so
didn't respond.

Yes, the "dummy" statement could be completely dropped to the same
effect -- still leaving the useless outer loop...

Nevertheless, I've just done some timeit tests on the two code snippets,
and to my *great* surprise the second ugly snippet is consistently a
smidgen faster even with the pointless import and dummy statement left in.

That is so counter-intuitive that I wonder whether I've done something
wrong, or if it's some sort of freakish side-effect of disk caching or
something. But further investigation will have to wait for later.

If anyone wants to run their own timing tests, don't forget to close the
file explicitly, otherwise timeit() will (I think...) simply iterate over
the EOF for all but the first iteration.
 
J

josh logan

 Why don't you read and discard the first line before processing the
rest of the file?

 file = open(filename, 'r')
 file.readline()
 for line in file: print line,

 (It works).

# You could also do the following:

from itertools import islice

f = open(filename)

for each_line in islice(f, 1, None):
print line
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,904
Latest member
HealthyVisionsCBDPrice

Latest Threads

Top