简体   繁体   中英

Finding the last element (digit) on every line in a file (Python)

I'm reading from a text file and I need to find the last element (digit) on each line. I don't understand why this code isn't working as I have tried it on a regular string but it doesn't seem to apply in this case.

f = open("file.txt", "r")
result = 0

for line in f:
    string = str(f.read())
    if string[-1:].isdigit() == True:
        result = int(string[-1:])
    else:
        result = 40

print(result)
f.close()

The file file.txt only contains the line

81 First line32

so the code should print out 2 as a result, but I only get 40 , as the first condition never becomes true. What am I doing wrong?

This line is extraneous:

string = str(f.read())

You don't need to read from your file, and will actually move the file pointer by doing so, causing all sorts of issues. You're already reading with this:

for line in f:

Thus, what you want is:

for line in f:
    if line[-1:].isdigit() == True:
        result = int(line[-1:])
    else:
        result = 40

This is explained in the documentation .

You have an f.read() too many. This is all you need:

f = open("file.txt", "r")
result = 0

for line in f:
    if line[-1:].isdigit():
        result = int(line[-1:])
    else:
        result = 40

print(result)
f.close()

Also the if string[-1:].isdigit() == True: can be replaced with if line[-1:].isdigit(): You may also want to use line.strip() to get rid of new lines, or else the comparison will fail.

f = open("file.txt", "r")
result = 0

for line in f:
    l = line.strip()
    if l[-1:].isdigit():
        result = int(l[-1:])
    else:
        result = 40

print(result)
f.close()

The problem is that the last character in the line is the end-of-line character. Use .strip() to remove it (it will also remove extra spaces).

with open("file.txt", "r") as f:
  for line in f:
    lastchar = line.strip()[-1]
    if lastchar.isdigit():
      result = int(lastchar)  
    else:
      result = 40        
    print(result)

This prints 2 as you requested in your question with the one-line file.

81 First line32

It will also work for multiple lines, printing the result for each line.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM