Home > Software engineering >  I want to return a list of length of lines in a file, but my code isn't working
I want to return a list of length of lines in a file, but my code isn't working

Time:07-11

I want to return the length on each line as an element in a list named lst but my code is not working, the output always comes to be an empty list. Please tell me what's wrong with my code.

# this is the file

f = open("abcd.txt", 'w')
f.write("Hello How Ar3 you?")
f.write("\nHope You're doing fine")
f.write("\nI'm doing okay too.")
f.write("\nSizole!")
f.close()

This is the code I wrote to return a list of length of lines in the file:

f = open("abcd.txt", 'r')
t = f.readlines()
print(t)
lst = []
for line in f.readlines():
    lst.append(len(line))
print(lst)

Output: lst == []

CodePudding user response:

Just make it simple by reading the line once and do the length count. below code is used list comprehension.

texts = f.readlines()
lst = [len(line) for line in texts]
print(lst)

Here's the output of the above code. Hope this helps and most of them had given the correct answers.

[19, 23, 20, 7]

CodePudding user response:

When you read the file back in the second code snippet, the:

t = f.readlines()
...

reads the entire file in to list and assigns it to the variable t.

You then try to read all the lines again with the:

for line in f.readlines():
    ...

Which will not work because they have all been read already.

To fix it, just change the for loop to this:

for line in t:

CodePudding user response:

You don't need to read the lines before the loop (that is the line t = ... is unnecessary).

In fact doing so is likely causing the problem - once you read the lines, the file pointer is at the end of the file so there's nothing left to read.

CodePudding user response:

In your code, you are calling f.readlines() twice. You just need to call it once:

f = open("abcd.txt", 'r')
t = f.readlines()
print(t)
lst = []
# instead of for line in f.readlines(), we can simply use t
for line in t:
    lst.append(len(line))
print(lst)

or if the variable t is not necessary:

f = open("abcd.txt", 'r')
lst = []
for line in f.readlines():
    lst.append(len(line))
print(lst)

f.readlines() will move the file pointer to the end of file. Calling it again will return an empty list, which is not what we want.

  • Related