2016-03-25 3 views
-1

テキストファイルから読み込んでおり、各行の最後の要素(桁)を見つける必要があります。私はこのコードが正常に動作しない理由を理解していません。通常の文字列で試してみましたが、この場合は適用されないようです。ファイル内のすべての行の最後の要素(数字)を見つける(Python)

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 

最初の条件がtrueになることはありませんように、そのコードは、結果として2をプリントアウトする必要がありますが、私は唯一の40を得るが含まれています。私は間違って何をしていますか?

+0

'for line in f'ブロックの最初の行として' print(行[-1:]) 'を実行するとどうなりますか? –

+0

私は何も、またはおそらくちょうど空白の束を取得していない "プレス入力を続行する"は、いくつかのレベルの下に位置しているようだ。 – Riggs

+0

「続行するにはEnterキーを押しますか?」 –

答えて

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:あなたはまた、新しい行を取り除くために、または他の比較が失敗しますline.strip()を使用したい場合がありif line[-1:].isdigit(): に置き換えることができます。

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() 
+0

ありがとう、私はこれまでもこれをしましたが、実際には私はf.read()が必要だと考えました。ありがとう#FacePalm :) – Riggs

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 

これはexplained in the documentationです。

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) 

あなたは1行のファイルで、あなたの質問に要求されたように、これは2を印刷します。

81 First line32 

また、複数の行にまたがって動作し、各行に結果を出力します。

関連する問題