我正在读取文本文件,我需要找到每行的最后一个元素(数字)。我不明白为什么这个代码不起作用,因为我在常规字符串上尝试过,但它似乎不适用于这种情况。
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()
文件file.txt
仅包含
81 First line32
所以代码应打印出2
作为结果,但我只得到40
,因为第一个条件永远不会变为真。我做错了什么?
答案 0 :(得分:4)
这一行是无关紧要的:
string = str(f.read())
您不需要从文件中读取数据,并且实际上会通过这样做来移动文件指针,从而导致各种问题。你已经用这个阅读了:
for line in f:
因此,你想要的是:
for line in f:
if line[-1:].isdigit() == True:
result = int(line[-1:])
else:
result = 40
答案 1 :(得分:1)
你有一个f.read()太多了。这就是你所需要的:
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()
if string[-1:].isdigit() == True:
也可以替换为if line[-1:].isdigit():
您可能还希望使用line.strip()
来删除新行,否则比较将失败。
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()
答案 2 :(得分:0)
问题是该行中的最后一个字符是行尾字符。使用.strip()
删除它(它也会删除多余的空格)。
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)
按照您在单行文件中提出的要求打印2
。
81 First line32
它也适用于多行,打印每行的结果。