Daniel Lara
Daniel Lara

Reputation: 45

Read First 10 Lines in a File; If Shorter Only Read Those Lines

I want to open a file, and read the first 10 lines of a file. If a file has less than 10 lines it should read as many lines as it has. Each line has to be numbered, wether it's text or it's whitespace. Because I have to strip each line, I can't differentiate between an empty string, and the end of a file. For example if I read a file with only three lines, it will print out lines 1 - 10, with lines 4 - 10 being empty, but I would like to have it stop after reaching that 3rd line, as that would be the end of the file. I would really appreciate any help, thank you.

def get_file_name():
    fileName = input('Input File Name: ')
    return fileName

def top(fileName):
    try:
        file = open(fileName, 'r')
        line = 'text'
        cnt = 1

        while cnt <= 10: 
            if line != '': 
                line = file.readline()
                line = line.rstrip('\n')
                print(str(cnt) + '.', line)
                cnt += 1
            else:
                line = file.readline()
                line = line.rstrip('\n')
                print(str(cnt) + '.', line)
                cnt += 1
        file.close()
    except IOError:
        print('FILE NOT FOUND ERROR:', fileName)

def main():
    fileName = get_file_name()
    top(fileName)

main()

Upvotes: 0

Views: 2020

Answers (3)

Ashish Sharma
Ashish Sharma

Reputation: 58

def read_lines():
    f = open("file-name.txt","r")
    num = 1

    for line in f:
        if num > 10:
            break
        print("LINE NO.",num, ":",line)
        num = num + 1

    f.close()

Here, the loop exits at the end of the file. So if you only had 7 lines, it will exit automatically after the 7th line. However, if you have 10 or more than 10 lines then the "num" variable takes care of that. EDIT: I have edited the print statement to include the line count as well and started the line count with 1.

Upvotes: 3

Jenkins
Jenkins

Reputation: 37

with open(filename, 'r') as f:
    cnt = 1
    for line in f:
        if cnt <= 10:
            print(str(cnt) + '.', line, end='')
            cnt += 1
        else:
            break

This should do exactly what you need. You can always remove the if/else and then it will read exactly however many lines are in the file. Example:


with open(filename, 'r') as f:
    cnt = 1
    for line in f:
        print(str(cnt) + '.', line, end='')
        cnt += 1

Upvotes: 1

ooi18
ooi18

Reputation: 142

You can try to load all the lines into array, count the total line and use an if statement to check if total is 10 or not, then finally use a for loop like for i in range (0,9): to print the lines.

Upvotes: 0

Related Questions